我有一个div(contenteditable="true"
),其中包含一些文字和一些HTML。我正在尝试替换整个div 中的文本,除了在某个类的链接中。
我试过了:
$('div#text').contents().not('a.selected').each(function() {
$(this).html(replace($(this).text()));
});
但似乎$(this).html()
是null
?
div的测试内容为'test <a class="selected">test2</a> test3'
作为输出,我希望"test "
和" test3"
替换为replace()函数的结果,而a.selected中的文本不受影响。
修改
div中可能还有其他一些html,可以忽略它。如果替换函数将事物切换为大写,这里是所需的输入ant ouptut:
输入:'test <a class="selected">test2</a> <a>test3</a>'
输出:'TEST <a class="selected">test2</a> TEST3'
编辑2
这似乎有效,但不是当replace()返回一些HTML
时$("div#text").contents().not("a.selected").each(function() {
this.nodeValue = replace(this.nodeValue);
});
答案 0 :(得分:1)
你的意思是什么?
$("div").contents().not("a.selected").each(function() {
this.nodeValue = replace(this.nodeValue);
});
DEMO: http://jsfiddle.net/ApgEc/
为了能够在replace
函数中插入HTML,我们需要重写代码:
$("div").contents().map(function() {
if (!$(this).is("a.selected")) {
return replace(this.nodeValue);
}
return this.outerHTML;
}).appendTo($("div").empty());
答案 1 :(得分:1)
$(function() {
$('#test').contents().each(function() {
var $this = $(this);
if ($this.is('a.selected')) return true;
if(this.wholeText)
this.wholeText = replace(this.wholeText);
else $this.html(replace($this.html()));
});
});