jQuery:CSS Selector:如何选择除特定类之外的所有元素?

时间:2012-08-04 10:54:48

标签: jquery css jquery-selectors

我需要选择div#request的内容,而不是.requestHeader的内容。我应该使用哪个选择器?

<div id="request">
  <h3 class="requestHeader">
    Request Details
  </h3>
    Dear Human, In this life you're allowed to make only one request. Keep in mind! Even that request will never be resolved!!
    <br/>
      Request for Money&nbsp;
      75.00&nbsp;
      USD&nbsp;
      per day
</div>

我试过了div#request:not(.requestHeader)。它不起作用,并给出与div#request相同的结果。我错过了什么?

所需输出:(仅打印)

    Dear Human, In this life you're allowed to make only one request. Keep in mind! Even that request will never be resolved!!
    <br/>
      Request for Money&nbsp;
      75.00&nbsp;
      USD&nbsp;
      per day

我需要在没有链接的情况下这样做。即$('#request'):not('requestHeader')只是没有办法。我可以自由地做这个$('SELECTOR-HERE')

5 个答案:

答案 0 :(得分:4)

$('*','#request').not(".requestHeader")

查找#request元素中的所有元素,然后排除类.requestHeader的元素

你遇到的问题可能是#request div中没有​​其他元素,文本只是文本节点而不是元素,所以要选择目标div的内容你可能需要使用andSelf()contents()取决于你打算如何使用选择器,这是回答问题所需的关键部分,你打算只是替换文本或作为DOM元素与它交互等

答案 1 :(得分:1)

$('#request').not('.requestHeader')

答案 2 :(得分:0)

如果您可以更改HTML,我建议在文本周围添加span元素。这将允许您轻松选择除requestHeader类之外的所有内容。

请参阅此jsFiddle http://jsfiddle.net/davew9999/gepga/

答案 3 :(得分:0)

我看到的唯一方法是过滤文本节点的包装元素的内容。

var theText = $('#request').contents().filter(function() {
     // Text nodes only
    return this.nodeType === 3;
}).text();

// Trim leading and trailing white spaces
console.log($.trim(theText));   

参见JSFiddle:http://jsfiddle.net/YNLwG/1/

答案 4 :(得分:0)

此jQuery将应用于#request元素中的所有元素,但带有.requestHeader类的元素除外。

$("#request *:not('.requestHeader')");