Javascript .innerHTML 但不包括内部 div

Javascript .innerHTML but excluding inner div

考虑到我有这个 div:

<div class="ResCheckIn">
  <div class="ResDtlLabel">
    Check-in
   </div>
   Thursday, October 18, 2018
</div>

我只是想获取字符串"Thursday, October 18, 2018",所以排除了内部的div。 如果我尝试 .innerHMTML:

document.querySelectorAll('.ResCheckIn').innerHTML;

它 returns .ResCheckIn 中的所有内容,包括内部 div 和 class "ResDtlLabel",所以这个:

<div class="ResDtlLabel tSmall tLight">
    Check-in</div>
Thursday, October 11, 2018

理想情况下,我愿意在不使用 jQuery 的情况下做到这一点。

// Example container.
let container = document.getElementsByClassName('ResCheckIn')[0];

// Loop over child elements and remove them. Note that this is ES6 syntax and may not yet be supported in all browsers.
Array.from(container.children).forEach(em => { 
    em.parentElement.removeChild(em);
});

console.log(container.textContent);

只是一个简单的例子。如果您仅从 HTMLElement(如本例中的 container)中删除所有子节点 elements(而不是 nodes),文本节点将被跳过,您将剩下纯文本。

一个选项是遍历 childNodes 并过滤 textNodes。以下函数获取所有 textNode 个子项并将它们的值存储在一个数组中。

const nodes = document.querySelector('.ResCheckIn').childNodes;
const texts = [].reduce.call(nodes, function(ret, el) {
  if ( el.nodeType === 3 ) {
    ret.push(el.nodeValue.trim());
  }
  return ret;
}, []);

textstextNode 内容的数组。

你可以这样使用:

document.querySelectorAll('.ResCheckIn')[0].textContent

使用jQuery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
  $(document).ready(function(){
    var html=$('.ResCheckIn').html();
    var parsedText=$.parseHTML(html);
     $.each(parsedText, (i, el) => {
          if (el.nodeType === 3) {
          if(el.nodeValue.trim()!=""){              
             console.log(el.nodeValue);
             alert(el.nodeValue);
           }
          }
     });
  });
</script>
<div class="ResCheckIn">
  <div class="ResDtlLabel">
    Check-in
   </div>
   Thursday, October 18, 2018
</div>

你必须使用 "content of node"。为了更好地理解这一点,请查看此 link.

您可以通过多种方式获得结果。下面是其中一种方法,

$(document).ready(function() {
  var parentnode = document.querySelectorAll('.ResCheckIn')[0];
  console.log($(parentnode).contents().filter(function() {
    return this.nodeType == 3;
  }).text().trim());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="ResCheckIn">
  <div class="ResDtlLabel">
    Check-in
  </div>
  Thursday, October 18, 2018
</div>

不是一个非常有创意的答案,但如果您正在寻找简单的解决方案,请试试这个

var content = document.querySelector(".ResCheckIn").innerHTML;
    content = content.split('</div>');
    if(content[1]){
        content = content[1].trim();
    }