dus*_*sty 10 html jquery jquery-selectors
为什么jQuery在这里两次返回相同的元素?
经过在HTML无数次,只有一个<div>有id="3"和class="password_field_real".
这是获取所有元素的结果class="password_field_real":
> $(".password_field_real")
[
<div class="password_field_real" id="2" style="display: none;"></div>,
<div class="password_field_real" id="3" style="display: none;"></div>,
<div class="password_field_real" id="7" style="display: none;"></div>,
]
Run Code Online (Sandbox Code Playgroud)
但是,当我试图获得class="password_field_real"并且id="3",我得到两个div的列表,它们是相同的!
> $("#3.password_field_real")
[
<div class="password_field_real" id="3" style="display: none;"></div>,
<div class="password_field_real" id="3" style="display: none;"></div>
]
Run Code Online (Sandbox Code Playgroud)
其他两个div不是这种情况:
> $("#7.password_field_real")
[
<div class="password_field_real" id="7" style="display: none;"></div>
]
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
*更新*
在jsFiddle中重现了这一点
*更新#2*
如果使用非数字ID,一切正常.
永远不要使用多次相同的id,id必须是独一无二的
alert( $("#3").length ); // will just return 1 not 8
Run Code Online (Sandbox Code Playgroud)
这个真正愚蠢的代码只是选择你的好,但从不使用它,将导致世界末日
alert( $("#3").find("#3").filter(".password_field_real").attr("class") );
Run Code Online (Sandbox Code Playgroud)
如果你需要每个子"div"和"a"的当前id,请尝试数据 - 为什么不是这样的代码
$(".password_entry").each(function(){
var $t = $(this);
var currentId = $t.attr("id");
$t.find("div,a").data("id",currentId);
});
Run Code Online (Sandbox Code Playgroud)
现在你可以用.data("id")从所有子"div"和"a"中提取当前id
例如:
$(".password_field_mask").click(function(){ alert( $(this).data("id") ); });
Run Code Online (Sandbox Code Playgroud)