【问题标题】:JQuery selecting text in parent divJQuery在父div中选择文本
【发布时间】:2012-08-05 18:07:56
【问题描述】:

我目前有以下

<div class ="parent">
  <div class="inner">Hello
    <div>Goodbye</div>
  </div>
</div>

<div class ="parent">
  <div class="inner">Hello
    <div>Goodbye</div>
  </div>
</div>

我目前正在使用$(div.parent).each(function(index,item) 遍历每个完美运行的父级。

我的问题是我需要选择单词 hello。我目前正在使用$(item).text(),但它总是返回 HelloGoodBye,这是一个问题。我需要忽略任何其他 div。

任何帮助表示感谢。

【问题讨论】:

标签: jquery html select each


【解决方案1】:

我建议不要使用jQuery.text() 方法,而是找到第一个childNode,这将是您要查找的文本节点:

​var divs = document.getElementsByClassName('inner'),
    i = 0;
for (i = divs.length; i--;) {
  console.log(divs[i].childNodes[0]);   
}

var divs = $('.inner');
divs.each(function() {
  console.log(this.childNodes[0]);
});

请记住,childNodes 方法不会被 jQuery 识别。

【讨论】:

【解决方案2】:

您可以通过克隆每个元素、删除不需要的 div 然后抓取文本来实现此目的。

$('div.parent div.inner').each(function(index,item) {
    $this = $(item).clone();
    $this = $this.find('div').remove();
    $this.text();
});​

这是一个 JS Fiddle,上面的代码和 HTML 正在运行:http://jsfiddle.net/L8T7s/

【讨论】:

    【解决方案3】:

    这个主题之前已经讨论过很多合适的解决方案:Using .text() to retrieve only text not nested in child tags

    【讨论】:

      【解决方案4】:

      试试

      $('div.parent').not('.parent .inner div').each(function(index,item)
      

      交替

      $(div.parent:not('.inner div').each(function(index,item)
      

      http://api.jquery.com/not/

      【讨论】:

      • 这似乎对我不起作用。然而,这可能是由于 DiV 在某个时候被替换了。例如,名为“inner”的 div 可能会被替换为没有类名的 div
      • 这行不通。 $(item).text(); 仍然会从最终的 div 中提取文本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多