3

我在 CKEditor 中有很多元素,它们连接了事件,并使用 .data() 方法将数据绑定到它们。我想从这个 HTML 块中删除任何  s。我可以简单地做

$('body').html($('body').html().replace(/&nbsp\;/, ''));

但是因为这会重置 HTML,它有效地重新创建了所有元素,这意味着我必须重新绑定所有事件和数据。我目前正在做的是这样的:

if ($body.html().indexOf(' ') > -1) {
    $body.find(':*:not(:has(*))').each(function(){
            // These nodes don't have any children so contain text or nothing
            $(this).html($(this).html().replace(/&nbsp\;/,''));
    });
}

这将替换 HTML 中的  s,如下所示:

     <p>Foo&nbsp;Bar</p>

但不是这样的 HTML:

     <div>Foo&nbsp;<span>Bar</span></div>

谁能想到更好的方法来做到这一点?

谢谢,

4

2 回答 2

2

只需选择目标元素内的所有文本节点,然后遍历它们进行替换。

$("*").contents().filter(function(){
    return this.nodeType === 3;
}).each(function(){
    // do your replace here using this.nodeValue
});

如果可能,我强烈建议过滤到更小的元素子集,'*'并且'body *'可能会很慢。

于 2013-01-25T19:10:54.133 回答
0

似乎您的第一个代码$('body').html($('body').html().replace(/&nbsp\;/, ''));是正确的。您只需要g在最后添加即可替换所有出现的事件,并确保您在文档加载时调用此函数,如此处..

$('document').ready(function () { $('body').html($('body').html().replace(/&nbsp\;/g, '')); });

于 2013-01-25T19:17:29.300 回答