我有一个 div ( contenteditable="true"
) ,其中包含一些 html。我正在尝试替换整个 div 中的文本,但与某个类的链接除外。
我试过:
$('div#text').not('a.selected').each(function() {
$(this).html = replaceFunction($(this).text))
});
但它不会取代任何东西。
我有一个 div ( contenteditable="true"
) ,其中包含一些 html。我正在尝试替换整个 div 中的文本,但与某个类的链接除外。
我试过:
$('div#text').not('a.selected').each(function() {
$(this).html = replaceFunction($(this).text))
});
但它不会取代任何东西。
您不想设置.html
,因为它是 jQuery 定义的函数。采用
$('#text :not(a.selected)').each(function() {
$(this).html(replaceFunction($(this).text())));
});
编辑:我还注意到您使用.text
的是一个值,但这也是一个函数。我在上面更正了它以调用.text()
而不是将其视为字符串。
EDIT2:另外,您的选择器不正确,已在上面修复。div#text
可以简单地#text
因为您不应该text
在页面上将 id 两次用于另一个元素。
你的选择器永远不会返回任何东西。您是在说“给 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()));
});
试试这个
$(this).html(replaceFunction($(this).text())));
您没有设置 div 的 html .. 但您似乎只是为其分配了值.. 什么都不做..
也失踪()
了.text()
在您的代码中,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 节点(包括文本节点)。