使用子JavaScript/jQuery交换DOM元素中的文本
所以我有一个DOM元素,看起来像这样:使用子JavaScript/jQuery交换DOM元素中的文本,javascript,jquery,html,Javascript,Jquery,Html,所以我有一个DOM元素,看起来像这样: <span>text</span> <b>some more text</b> even more text here <div>maybe some text here</div> <span>text</span> <b>some more text</b> even more *candy* here <div>may
<span>text</span>
<b>some more text</b>
even more text here
<div>maybe some text here</div>
<span>text</span>
<b>some more text</b>
even more *candy* here
<div>maybe some text here</div>
我已经尝试用regex替换。但是它会替换所有出现的文本
我也不知道没有标签的文本会在哪里。它可能处于中间,在开始或结束时(基本上在任何地方),我也不能删除子节点,因为我不知道它们的位置,并且如果存在“<代码> <代码>子”,当我在所有文本操作结束时再次添加它时,它可能会重新运行。
有人能给我指出正确的方向吗?您可以检查节点的nodeType
属性:
$('#parent').contents().each(function() {
if (this.nodeType === 3) {
this.nodeValue = this.nodeValue.replace('text', 'candy');
}
});
如果要用HTML替换文本,可以使用replaceWith
方法:
$('#parent').contents().filter(function() {
return this.nodeType === 3 && this.nodeValue.indexOf('text') > -1;
}).replaceWith(function() {
return this.nodeValue.replace(/(text)/g, '<strong>candy</strong>');
});
$('#父').contents().filter(函数(){
返回this.nodeType===3&&this.nodeValue.indexOf('text')>-1;
}).replaceWith(函数(){
返回此.nodeValue.replace(/(text)/g,“candy”);
});
您可以检查节点的节点类型
属性:
$('#parent').contents().each(function() {
if (this.nodeType === 3) {
this.nodeValue = this.nodeValue.replace('text', 'candy');
}
});
如果要用HTML替换文本,可以使用replaceWith
方法:
$('#parent').contents().filter(function() {
return this.nodeType === 3 && this.nodeValue.indexOf('text') > -1;
}).replaceWith(function() {
return this.nodeValue.replace(/(text)/g, '<strong>candy</strong>');
});
$('#父').contents().filter(函数(){
返回this.nodeType===3&&this.nodeValue.indexOf('text')>-1;
}).replaceWith(函数(){
返回此.nodeValue.replace(/(text)/g,“candy”);
});
看来我是被按到按钮上了,所以这里有另一种方法。我假设所有这些元素都包含在某种父元素中,比如“enclosingDiv”。如果是这样,一个简单的答案是:
var e = document.getELmentById('enclosingDiv');
var divAsString = String(e);
var newDivAsString = divAsString.replace('text', 'candy');
e.innerHTML = newDivAsString;
看来我被打败了,所以这里有另一种方法。我假设所有这些元素都包含在某种父元素中,比如“enclosingDiv”。如果是这样,一个简单的答案是:
var e = document.getELmentById('enclosingDiv');
var divAsString = String(e);
var newDivAsString = divAsString.replace('text', 'candy');
e.innerHTML = newDivAsString;
这真是太棒了!!!如果我还想把它换成糖果,并把它也渲染出来呢?似乎this
没有我可以使用的.innerHTML
。@Andriy是的,textNodes没有innerHTML
属性。您可以用修改后的值替换textNode。这非常有效!!!如果我还想把它换成糖果,并把它也渲染出来呢?似乎this
没有我可以使用的.innerHTML
。@Andriy是的,textNodes没有innerHTML
属性。您可以用修改后的值替换textNode。如果父级Div
没有id怎么办?那么最好使用undefined的答案。当我运行代码时,我得到以下信息:[object XrayWrapper[object htmldevelment]]
你能告诉我我做错了什么吗?如果家长Div
没有id怎么办?那么你最好使用undefined的答案。当我运行你的代码时,我得到以下信息:[object XrayWrapper[object htmldevelment]
你能告诉我我做错了什么吗?