有没有办法只获取top元素的innerText(并忽略子元素的innerText)?

时间:2012-02-18 10:36:37

标签: javascript html dom dom-manipulation

有没有办法只获取top元素的innerText(并忽略子元素的innerText)?

示例:

<div> 
   top node text 
   <div> child node text </div>
</div>

如何在忽略“子节点文本”的同时获取“顶级节点文本”? top div的innerText属性似乎返回内部顶部文本的连接。

5 个答案:

答案 0 :(得分:11)

迭代子节点并连接文本节点:

var el = document.getElementById("your_element_id"),
    child = el.firstChild,
    texts = [];

while (child) {
    if (child.nodeType == 3) {
        texts.push(child.data);
    }
    child = child.nextSibling;
}

var text = texts.join("");

答案 1 :(得分:4)

  1. 克隆元素。
  2. 遍历所有子节点(向后,以避免冲突):
    如果元素具有tagName属性,则它是一个元素:删除节点。
  3. 使用innerText获取文字内容(如果不支持textContent,则回退到innerText。)
  4. 代码:

    var elem = document.getElementById('theelement');
    elem = elem.cloneNode(true);
    for (var i=elem.childNodes.length-1; i>=0; i--) {
        if (elem.childNodes[i].tagName) elem.removeChild(elem.childNodes[i]);
    }
    var innerText = elem['innerText' in elem ? 'innerText' : 'textContent'];
    

答案 2 :(得分:3)

这将适用于您的示例: document.getElementById("item").firstChild.nodeValue;

  

注意:请记住,如果您知道要处理特定的HTML,这将有效。如果您的HTML可以更改,例如:

<div> 
    <div class="item"> child node text </div>
    top node text 
</div>
  

然后您应该使用@Tim Down

之类的更通用的解决方案

以下是工作代码段:

&#13;
&#13;
window.onload = function() {
   var text = document.getElementById("item").firstChild.nodeValue;
   document.getElementById("result").innerText = text.trim();
};
&#13;
#result {
  border: 1px solid red;
}
&#13;
<div id="item">
  top node text 
   <div> child node text </div>
</div>



<strong>Result:</strong> <div id="result"></div>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

如果您不想忽略子元素的内部文本,请使用以下函数:

function getInnerText(el) {
    var x = [];
    var child = el.firstChild;
    while (child) {
        if (child.nodeType == 3) {
            x.push(child.nodeValue);
        }
        else if (child.nodeType == 1) {
            var ii = getInnerText(child);
            if (ii.length > 0) x.push(ii);
        }
        child = child.nextSibling;
    }
    return x.join(" ");
}

答案 4 :(得分:0)

function getDirectInnerText(element) {
  var childNodes = element.childNodes;
  result = '';

  for (var i = 0; i < childNodes.length; i++) {
    if(childNodes[i].nodeType == 3) {
      result += childNodes[i].data;
    }
  }

  return result;
}

element = document.querySelector("div#element");
console.log(getDirectInnerText(element))
<div id="element"> 
   top node text 
   <div> child node text </div>
</div>