jQuery contents()导致IE出现问题

时间:2010-12-21 15:28:44

标签: jquery text

我正在使用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)之后的文本将需要替换为一些新生成的文本。

3 个答案:

答案 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)

改为使用datanodeValue

node.data = name;
node.nodeValue = name;

两种浏览器都广泛支持:

Quirksmode: nodeValue

Quirksmode: data