0

我正在寻找一种方法来定位文档中的特定标记,例如!divide!或者正常人--divide--编写的语言中通常不存在的东西,但不需要火箭科学家想象出来的东西,又是不同于常规的东西文本

然后定位它!divide!并在删除时换行文本!divided!。像这样:

Lorem ipsum dolor !divide! sit amet变成>>

<p>Lorem ipsum dolor</p> <p>sit amet</p>

Lorem !divide! ipsum dolor !divide! sit amet变成>>

<p>Lorem</p> <p>ipsum dolor</p> <p>sit amet</p>

这是..好吧,这就是我到目前为止所拥有的。最重要的是,我试图把我的想法放在一起,并试图告诉我在这里寻找什么:http: //jsfiddle.net/PvMJL/2/

4

2 回答 2

2

如果您有嵌套.TextCont元素,这将避免出现问题。如果这不会发生,您可以摆脱not()[docs]方法。

var with_dividers = $('.TextCont:contains("--divider--")')
               .not('> .TextCont:contains("--divider--")');


with_dividers.html(function(i,htm) {
    return '<p>' + htm.split('--divider--').join('</p><p>') + '</p>';
});

示例:http: //jsfiddle.net/CFLV4/

而且我将您的 ID 更改为类,因为重复的 ID 无效。


编辑:为了解释,在 JavaScript 中,您不附加开始和结束标记。您需要从处理整个元素的角度进行思考。

在上面的代码中,html()[docs]方法被传递了一个函数。函数的返回值是元素的新内容htm参数传递的是当前内容的字符串。

所以我们要做的是获取现有内容,然后执行 a .split('--divider--'),得到一个数组,例如:

['<span>Lorem</span>',
  '<a href="#">ipsum</a>',
  'dolor sit amet.'
]

如您所见,--divider--文本已被删除,字符串在原处拆分--divider--

然后我们.join()在数组上做一个,使用'</p><p>'作为连接文本,给我们:

'<span>Lorem</span></p><p><a href="#">ipsum</a></p><p>dolor sit amet.'

...但当然我们缺少我们的开始和结束标签,所以我们将它们添加到开始和结束,所以我们的代码:

'<p>' + htm.split('--divider--').join('</p><p>') + '</p>'

...最终给了我们:

'<p><span>Lorem</span></p><p><a href="#">ipsum</a></p><p>dolor sit amet.</p>'

那是函数的返回值,因此成为新的内容。

于 2011-08-08T20:49:03.550 回答
0

试试这个

var textToSearch = "!divide!"
$('containerSelector:contains("'+ textToSearch +'")').each(function(){
   $(this).html("<p>" + $(this).text().replace(textToSearch, "</p> <p>") + "</p>");
});
于 2011-08-08T20:45:25.327 回答