我有一个div(contenteditable="true"
),其中包含一些html。我正在尝试替换整个div 中的文本,除了在某个类的链接中。
我试过了:
$('div#text').not('a.selected').each(function() {
$(this).html = replaceFunction($(this).text))
});
但它并没有取代任何东西。
答案 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节点(包括文本节点)。