使用jQuery更新“text”节点

时间:2013-03-14 16:43:55

标签: jquery

我有html喜欢:

<label><input type="radio" /> Lorem</label>

将“Lorem”更改为“Ipsum”的最佳方法是什么?这些不起作用:

// nope:
$('input').next().text('Ipsum'); 

// also nope:
var text = $('input').parent()[0].childNodes[1];
$(text).text('Ipsum');

我可以轻松地将html更改为:

<label><input type="radio" /><span> Lorem</span></label>

或直接使用replaceWholeText DOM方法:

$('input').parent()[0].childNodes[1].replaceWholeText(' Ipsum');

或其他任何东西,但我想知道是否有一个干净的jQuery方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

丑陋的方式:

 $('input').parent().contents().each(function(){
   if(this.nodeType === 3)
     this.nodeValue= "Ipsum";
 });

或更好:

$('input')[0].nextSibling.nodeValue = "Ipsum";

答案 1 :(得分:1)

jQuery没有任何第一类文本节点支持。你可以:

$("input")[0].nextSibling.nodeValue = "Ipsum";

或者使用带有标识符或类的<span>并将其作为目标。如果你需要动态更改文本,它可能需要保证这样的容器。

答案 2 :(得分:0)

$('label').contents().last().replaceWith("Ipsum");

但是,我个人会使用nodeValue

希望这有帮助!

样本: http://jsfiddle.net/dirtyd77/SLGdE/25/