2

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

我试过:

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

但它不会取代任何东西。

4

4 回答 4

3

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

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

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

EDIT2:另外,您的选择器不正确,已在上面修复。div#text可以简单地#text因为您不应该text在页面上将 id 两次用于另一个元素。

于 2012-10-09T22:10:24.550 回答
3

你的选择器永远不会返回任何东西。您是在说“给 div id=text 的 div 不是 class=selected 的 a 元素”。用于.children()获取 div 的子项。

.html并且.text是方法。你不能分配给他们。它们具有获取和设置的重载:
.html()将获取 html。
.html(newhtml)将设置html。

你想要这样的东西:

$('div#text').children().not('a.selected').each(function() {
    $(this).html(replaceFunction($(this).text()));
});
于 2012-10-09T22:11:48.960 回答
0

试试这个

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

您没有设置 div 的 html .. 但您似乎只是为其分配了值.. 什么都不做..

也失踪().text()

于 2012-10-09T22:12:15.477 回答
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 节点(包括文本节点)。

于 2012-10-09T22:19:01.210 回答