替换链接以外的文本

时间:2012-10-09 22:08:11

标签: jquery contenteditable

我有一个div(contenteditable="true"),其中包含一些html。我正在尝试替换整个div 中的文本,除了在某个类的链接中。

我试过了:

$('div#text').not('a.selected').each(function() {
    $(this).html = replaceFunction($(this).text))
});

但它并没有取代任何东西。

4 个答案:

答案 0 :(得分:3)

您不想设置.html,因为它是由jQuery定义的函数。使用

$('#text :not(a.selected)').each(function() {
  $(this).html(replaceFunction($(this).text())));
});

编辑:我也注意到你使用.text作为值,但这也是一个函数。我已在上面更正了它来调用.text()而不是将其视为字符串。

EDIT2:此外,您的选择器不正确,已在上面修复。 div#text可以只是#text,因为您不应该在页面上两次使用id text来获取另一个元素。

答案 1 :(得分:3)

您的选择器永远不会返回任何内容。你说“给id = text的文本,它不是class = selected的元素”。使用.children()来获取div的孩子。

.html.text是方法。您无法分配给他们。他们有获取和设置的重载:
.html()将获得html .html(newhtml)将设置html。

你想要这样的东西:

$('div#text').children().not('a.selected').each(function() {
    $(this).html(replaceFunction($(this).text()));
});

答案 2 :(得分:0)

试试这个

$(this).html(replaceFunction($(this).text())));

你没有设置div的html ..但你似乎只是为它赋值..哪个什么都没做..

()

也缺少.text()

答案 3 :(得分:0)

在你的代码中,jQuery将找到ID为“text”的所有div(有一个),然后将从结果集中删除所有具有“selected”类的锚元素(没有)。

如果在div#text中,所有内容都包含在任何类型的元素中,请尝试以下方法:

$('div#text').children().not('a.selected').each(function() {
    $(this).html = replaceFunction($(this).text))
});

或更低性能但是所有级别的发现

$('div#text').find("*").not('a.selected').each(function() {
    $(this).html = replaceFunction($(this).text))
});

您还可以在一个简单的循环中使用vanilla JS扫描所有HTML节点(包括文本节点)。