需要帮助构建一个jQuery查询

时间:2011-08-03 16:38:10

标签: jquery

我遇到了jQuery查询的问题。

考虑以下(疯狂)HTML示例:

<!-- this is the outermost condition -->
<div id="condition">

     <!-- this is a tag that I am looking for -->
     <input type="text" />

     <div id="condition">
          <input type="radio" />
     </div>

     <div>

          <div id="condition">
               <input type="checkbox" />
          </div>

          <!-- this is a tag that I am looking for -->
          <input type="text" />

     </div>
</div>

鉴于上面的示例标记和最外层条件(见上图),我如何获得所有输入元素在该条件下,也不是内部条件的成员?

我提供了示例,以便您可以查看我希望查询返回的标记。

4 个答案:

答案 0 :(得分:1)

页面上的所有html元素都应具有唯一ID。

那就是说,你可以这样做:

// select the :first #condition
var $first = $("#condition:first");

// use map() to filter out inputs that don't meet our criteria
// and dump them into the inputs Array.
var inputs = $first.find("input").map(function() {

    // select parent with #condition ID
    var $parent = $(this).parent("#condition");

    // if parent == null or parent doesn't have any parents with ID = #condition
    // return the input, otherwise null, which removes it from the list
    return $parent.length == 0 || $parent.parents("#condition").length == 0 
        ? $(this) : null;
});

您最终得到的Array输入未包含在#condition中,或者其父项是第一个#condition元素


工作示例:http://jsfiddle.net/hunter/EsYLx/

答案 1 :(得分:0)

你可以这样做:

var found = $('#condition input').filter(function() {
    var parents = $(this).parents('.condition');
    return parents.length === 1 && parents[0].id === 'condition';
});

但是,你的HTML不仅疯狂,而且无效。您不能拥有具有相同ID的多个元素,因此您需要先修复它。

以下是一个有效的例子:http://jsfiddle.net/FishBasketGordo/R7MX4/

答案 2 :(得分:0)

首先,你不能拥有2个具有相同ID的元素 - 它们必须是唯一的,但如果你继续将它们改为类,你可以使用类似的东西:

$('#condition input:not(#condition #condition input)').doSomething();

答案 3 :(得分:0)

这应该有效:注意你有两个id,id应该是唯一的。

$("#condition > input").html();