我遇到了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>
鉴于上面的示例标记和最外层条件(见上图),我如何获得所有输入元素在该条件下,也不是内部条件的成员?
我提供了示例,以便您可以查看我希望查询返回的标记。
答案 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
元素
答案 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();