我正在使用jQuery中的contents()函数来获取LI中的一些文本,我无法直接使用span或其他选择器。
我写的代码如下:
$('#tierArray_' + tierId).contents().each(function(i, node) {
if (node.nodeName == "#text") {
node.textContent = name;
}
});
这在Firefox中运行良好,并将目标文本更改为“名称”中设置的内容。但是在IE中我遇到以下错误:
“对象不支持此属性或方法”
这似乎与“node.textContent = name”这一行有关,因为当我发表评论时,错误消失了。
简而言之,我只是想用新创建的文本替换一些文本,HTML标记如下:
<li class="ui-state-default" id="tierArray_105">
<span style="display: block;" id="revoke_105">
<a class="tierStatus" title="Revoke" href="#">Revoke</a> |
<a class="tierEdit" id="edit_tier_105" title="Bla 3aaa11" href="#">Edit</a>
</span>
<span style="display: none;" id="active_105">
<a class="tierStatus" title="Activate" href="#">Activate</a> |
<a class="tierEdit" id="edit_tier_105" title="Bla 3aaa11" href="#">Edit</a>
</span>
Bla 3aaa11
</li>
因此,最后一个跨度(Bla 4aaa11)之后的文本将需要替换为一些新生成的文本。
答案 0 :(得分:2)
Internet Explorer不支持textContent属性。
但是,由于您只想替换文本节点的内容,因此您应该能够使用nodeValue代替:
$("#tierArray_" + tierId).contents().each(function(i, node) {
if (node.nodeName == "#text") {
node.nodeValue = name;
}
});
答案 1 :(得分:1)
IE不支持.textContent
。您可能有幸在IE中设置.innerText
:
if(typeof(node.textContent) != 'undefined'){
node.textContent = name;
} else {
node.innerText = name;
}
答案 2 :(得分:1)
改为使用data
或nodeValue
:
node.data = name;
node.nodeValue = name;
两种浏览器都广泛支持: