jQuery选择器混乱

时间:2012-08-23 08:15:11

标签: javascript jquery text jquery-selectors html-lists

我有以下代码..

<span class="under"> 
texthere
    <ul class="list">
        <li> list text here</li>
    </ul>
</span>

当我运行$(".under").text()时,我会在此处获得“textherelist文字”。

我已经尝试了$(".under :not(.list)").text()并得到了定义。

我也没有得到$(".under").not(".list").text()

的正确输出

所以我的最后一次尝试是$(".list").parent().text()

这会产生textherelist文本

我在哪里遇到这么简单的问题?

P.S。不一定是jQuery可以是JavaScript,如果它更简单。

通缉结果:texthere

3 个答案:

答案 0 :(得分:3)

所以我猜你是在文字之后:texthere

var elem = $(".under").clone(),
    text = $.trim(elem.children().remove().end().text());

FIDDLE

克隆元素,删除所有子元素并获取剩余的文本。

答案 1 :(得分:2)

来自docs

  

描述:获取集合中每个元素的组合文本内容   匹配元素,包括它们的后代。

所以是的,这种行为是预料之中的。

您可以尝试此操作以仅获取选择器的直接文本节点:

$('.under').contents().filter(function(){ return(this.nodeType == 3); }).text()

说明:

.contents()docs)返回选择器的子节点,包括textnodes

  

描述:获取匹配集中每个元素的子元素   元素,包括文本和注释节点。

.filter()接受回调只返回您需要的内容,基于此,您只使用nodeType == 3,这是一个文本节点。

http://jsfiddle.net/R4Pzf/

答案 2 :(得分:2)

你走了:

var text = $('.under').contents(':not(.list)').text();

实施例: http://jsfiddle.net/ak4FU/1/