在“td”标签内,如何在不删除整个“span”标签脚本的情况下替换“span”标签后面的“BMW”字样? (在JQuery中)。
“宝马”这个词是通配符。它可以是“福特”,“沃尔沃”等。
我正在使用 JQuery 版本2.0
$('#'....).???
<td>
<span column="17" style="cursor:pointer"></span> BMW
</td>
答案 0 :(得分:8)
如果文本节点是问题中的下一个兄弟节点,请使用nextSibling:
$('span[column="17"]').get(0).nextSibling.nodeValue = 'Volvo';
答案 1 :(得分:2)
尝试一下......注意我省略了任何空格的文本节点:
$("YOUR TD SELECTOR HERE")
.contents()
.filter(
function() {
return this.nodeType == 3 && $(this).text().replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
)
.text('text to replace here');
答案 2 :(得分:1)
您可以使用.contents()
,.filter()
和.replaceWith()
:
实施例
$('table').find('td')
.contents()
.filter(function() {
return this.nodeType === 3;
})
.replaceWith("hello world");
});
答案 3 :(得分:1)
编辑:我忘记了第一次通话的结束括号。
不确定如何识别列,因此您可能需要更改选择器。这是一个直接搜索和替换。你确实只想更换宝马这个词,对吗?
// Example: $(table.cars td)
$('td').each(function()
{
var repl = $(this).html().replace('BMW', 'Ford');
$(this).html(repl);
});
答案 4 :(得分:1)
我不知道任何不错的jQuery解决方案,所以我提供低级javaScript方式。对不起,但相信它会有所帮助。
$("td").each(function(i,v){
for (var i = 0;i < v.childNodes.length;i++){
if (v.childNodes[i].constructor.name=="Text"){
v.childNodes[i].nodeValue=v.childNodes[i].nodeValue.replace(/BMW/,"Volvo");
}
}
});
编辑:
它的小容器不兼容所以版本更好:
$("td").each(function(i,v){
for (var i = 0;i < v.childNodes.length;i++){
if (v.childNodes[i] instanceof Text){
v.childNodes[i].nodeValue=v.childNodes[i].nodeValue.replace(/BMW/,"Volvo");
}
}
});
在这里,我将它变为现实:http://jsbin.com/ItotOPo/1/edit?html,js,output