代码之家  ›  专栏  ›  技术社区  ›  Dan D.

JavaScript获取不包括子级的textContent

  •  10
  • Dan D.  · 技术社区  · 8 年前

    首先,我正在为JavaScript创建一个库,我不能使用jQuery。我正在尝试获取HTML元素的文本内容,而不包含其子元素的文本属性。

    innerText和textContent属性都不能满足我的需要,请帮助。

    5 回复  |  直到 6 年前
        1
  •  13
  •   superui    8 年前

    您可以使用DOMAPI作为childNodes和nodeType来解决问题。

    var elChildNode = document.querySelector("#hello").childNodes;
    var sChildTextSum = "";
    
    elChildNode.forEach(function(value){
        if(value.nodeType === Node.TEXT_NODE) { 
            console.log("Current textNode value is : ", value.nodeValue.trim());
            sChildTextSum += value.nodeValue;
        }
    }); 
    
    console.log("All text value of firstChild : ", sChildTextSum);
    

    我创建了如上所述的示例代码。

    https://jsfiddle.net/nigayo/p7t9bdc3/

        2
  •  3
  •   Roman Mishin    2 年前

    得到 Author's Name 来自以下元素,不包括 <span>... :

    <div class="details__instructor">
        Author's Name<span ng-show="job_title">, Entrepreneur</span>
    </div>
    

    使用 childNodes[0] 例如:

    document.querySelector('div.details__instructor').childNodes[0].textContent
    
        3
  •  2
  •   jimjamz    2 年前

    只使用JavaScript(您指定您不能使用jQuery),并且您已经提供并知道 id 对于父元素:

    document.getElementById('parent_element_id').childNodes[0].nodeValue;
    

    您也可以使用 .trim() 删除删除任何子元素文本时留下的任何尾随空格字符:

    document.getElementById('parent_element_id').childNodes[0].nodeValue.trim();
    
        4
  •  1
  •   JHON ZEKE    4 年前
    var mydiv = getElementByID("id");
    function Get_text(element) {
        var selected = element.cloneNode(true);
        var text;
        while (selected.firstChild) {
          if (selected.firstChild.nodeType == 3) text = selected.firstChild.nodeValue;
          selected.removeChild(selected.firstChild);
        }
        return text;
      }
    Get_text(mydiv);
    
        5
  •  1
  •   deviavir    2 年前

    我知道这里有很多好的解决方案,但没有一个真正实现了我需要的(获取 仅有一个的 节点,没有其子节点),因此为未来的搜索者共享此信息。

    var html = document.getElementsByTagName("*");
    
    for (var i = 0; i < html.length; i++) {
        var el = html[i];
        for (var j = 0; j < el.children.length; j++) {
            var child = el.children[j],
                childTextContent = child.innerHTML;
            // Remove all children tags, leaving only the actual text of the node.
            childTextContent = childTextContent.replace(/\<.*\>.*\<\/.*\>/gmi, "");
            // Also remove <img /> type tags.
            childTextContent = childTextContent.replace(/\<.*\ \/\>/gmi, "");
            console.log(childTextContent);
            // Now you can do any type of text matching (regex) on the result.
        }
    });