不重复ID的搞砸了jQuery选择?(Does duplicate id's screw u

2019-06-24 07:31发布

如果我有两个div,都使用id =“myDiv”

$("#myDiv").fadeOut(); 淡出两个div的出来吗? 还是会褪色只有第一/第二? 或者根本没有?

如何更改它淡出哪一个?

注:我知道的副本ID的是对标准,但我使用的fancybox模式弹出并复制了弹出窗口的内容网页上指定的内容。 如果有人知道解决的办法(也许我使用的fancybox错误)请让我知道。

Answer 1:

jQuery的查询的ID时恰好一个元素相匹配。 最多一个数组Element的对象将返回$("#foo").get() 。 见jQuery的文档获取更多信息,或者自己尝试一下。

$(function() {
    alert($("#foo").length);
});


Answer 2:

元素ID应该是唯一的。 具有相同ID的多个div将是不正确的,不可预测的,蔑视ID的目的。 如果你这样做:

$('.myDiv').fadeOut();

这将淡化他们两个了,假设你给他们一个班myDiv和唯一ID(或没有)的。



Answer 3:

“注:我知道的副本ID的是对标准”

那就不要去做。 你已经想通了两个问题。 它违反了标准,并与jQuery的(实际上经常DOM的)选择机制干扰。 有可能会在未来更多的问题。

很可能,你正在使用的fancybox错了,在这种情况下,我希望有人熟悉它可以帮助你。 更糟的是,如果脚本本身是有缺陷的,你不应该使用它。



Answer 4:

由于$(“#myDiv”)将只与ID返回第一个div,你必须找到使用这种伎俩,ID的所有元素:

$('[id=myDiv]');

因此,对于你的情况,在淡出适用于所有这些div的:

$('[id=myDiv]').fadeOut();

如果你想确保你的页面没有这个ID两次,然后你可以这样做,删除多余的:

$('[id=myDiv]:gt(0)').remove();


Answer 5:

你也可以去使用find途径()。 发现将返回所有的元素与ID,并且可以将范围限制在一个特定的父母,如果需要尝试类似$(document).find('#myDiv').fadeOut();

要么

$('.parentElement').find('#myDiv').fadeOut();


Answer 6:

我遇到了同样的问题。 显然,当您从您想要打开的fancybox页面上的内容,它创建的原始内容的镜像股利。 在我的情况下,控制被包裹在一个div那的fancybox创建了一个名为“fancy_div”

我能选择的控制,并得到它通过使用选择以下格式值:

$( '#fancy_div [ID =的inputText]')VAL();

你可以控制的范围内的fancybox别处存在。 做的最好的事情就是看viewsource,但它的棘手。

去查看源代码,使用以下技术:将这个标签您的形式:获得价值打开表单,点击标签,打开警报窗口。
确保你的光标在网页内容(找到控制和点击)内。
右键点击了控制,并选择“查看源文件”。
div的一束存在,所以查找包含内容股利。

希望这可以帮助。



Answer 7:

我最近有一个类似的问题。 我有通过Ajax负载显示不同内容的单页。 不存在触发服务器生成一个PDF图像的按钮。

我原来的解决方案是使用一类选择,它工作得很好,但造成的摩擦与其他开发。 在使用类作为标识符使代码丑陋的链接有这么多的班了。 所以,我使用的名称属性:

<a name="printButton"....

$('a[name="printButton"]').on('click',function(){....

工作只是花花公子!



文章来源: Does duplicate id's screw up jquery selectors?