JQuery在嵌套元素上查找不带选择器的文本节点只能使用.contents()和filter()

时间:2015-10-04 12:24:27

标签: javascript jquery jquery-selectors

请帮助我理解为什么会这样。

(更新)TL; DR: 使用find with not(NESTED_ELEMENT)选择器时将包含嵌套元素的文本,但在使用find with not(NESTEDT_ELEMENT)+ contents + filter(TEXT_NODE)时将被排除。

我想从页面获取文本,但要排除某些元素。 为简单起见,我仅排除了<p>元素(和后代),但是当我使用text()时,我也在排除元素中获取文本。 当我使用contents()过滤结果以仅包含文本节点时,只有通过不从排除的元素返回文本,not选择器才“正常工作”。请使用以下代码查看下图:

enter image description here 如果不使用contents(),它为什么不起作用?

感谢。

为方便起见:

我测试的网址是this one

为我提供排除元素文本的代码:

$('body').find(':not(p, p *)').text()

为我提供所需文本的代码(排除元素的文本不存在):

$('body').find(':not(p, p *)').contents().filter(function(){return this.nodeType == 3}).text()

这是URL中的HTML部分。正如你所看到的,那里有一个<p>元素,如上所述,我想从这个HTML中获取文本但是要排除一些元素(为简单起见选择了p,生产中会有更多的规则)。 / p>

<div class="col-lg-12">
                    <header id="header" role="banner" class="jumbotron">
                        <h1>
                            <img src="/img/icon/apple-touch-icon-114-precomposed.png" class="offscreen" alt="">
                            <i class="icon-html5" aria-hidden="true"></i><span class="offscreen">HTML 5</span>
                            <span>Semantics and Accessibility: <span class="subheader">Heading Structure</span></span>
                        </h1>
                        <p class="lead" id="lead_content">The more you understand the specification, the more you'll realize there are more right 
                        ways to implement <em>proper</em> semantic HTML markup than wrong. Thinking in terms of web accessibility can provide direction.</p>
                    </header>
                </div>

1 个答案:

答案 0 :(得分:0)

尝试使用$products = Product::all(); Session::put('products', $products); dd(Session::get('products')); .clone().remove()

&#13;
&#13;
.text()
&#13;
var filtered = $(".col-lg-12").clone();
filtered.find("p").remove();

console.log(filtered.text())
&#13;
&#13;
&#13;