如果我有两个div,都是id =“myDiv”
$("#myDiv").fadeOut();
会淡出两个div吗?或者它只会在第一/第二次消失?或者根本没有?
如何更改淡出哪一个?
注意:我知道重复的ID是违反标准的,但我正在使用fancybox模式弹出窗口,它会在页面上复制弹出窗口内容的指定内容。如果有人知道解决这个问题(也许我使用fancybox错误),请告诉我。
答案 0 :(得分:11)
元素ID应该是唯一的。拥有相同ID的多个DIV将是不正确和不可预测的,并且违背了ID的目的。如果你这样做了:
$('.myDiv').fadeOut();
如果你给他们一组myDiv和唯一的ID(或根本没有),这会使他们两个都消失。
答案 1 :(得分:7)
“注意:我知道重复的ID是违反标准的”
然后不要这样做。你已经发现了两个问题。它违反了标准,它干扰了jQuery(实际上是常规DOM)的选择机制。未来可能会有更多问题。
很可能,你 使用fancybox错误,在这种情况下我希望熟悉它的人会帮助你。或者更糟糕的是,如果脚本本身存在缺陷,则不应使用它。
答案 2 :(得分:6)
jQuery在查询ID时只匹配一个元素。 Element
将返回最多一个$("#foo").get()
对象的数组。有关详细信息,请参阅jQuery documentation,或亲自尝试。
$(function() {
alert($("#foo").length);
});
答案 3 :(得分:1)
由于$('#myDiv')只会返回带有该ID的第一个div,因此您必须使用此技巧找到具有该ID的所有元素:
$('[id=myDiv]');
因此,对于您的情况,将fadeOut应用于所有这些div:
$('[id=myDiv]').fadeOut();
如果你想确保你的页面没有两次这个ID,那么你可以通过这样做删除多余的:
$('[id=myDiv]:gt(0)').remove();
答案 4 :(得分:1)
您也可以使用find()。 find将返回具有该ID的所有元素,并且您可以根据需要尝试将范围限制为特定父级$(document).find('#myDiv').fadeOut();
或
$('.parentElement').find('#myDiv').fadeOut();
答案 5 :(得分:0)
我遇到了同样的问题。显然,当您在要从中打开Fancybox的页面上创建内容时,它会创建原始内容的镜像div。在我的实例中,控件被包装在fancybox创建名为“fancy_div”
的div中我能够通过使用选择器的以下格式来选择控件并获取它的值:
$('#fancy_div [id = InputText]')。val();
您的控件可能存在于Fancybox中的其他位置。最好的办法是查看viewsource,但这很棘手。
要访问视图源,请使用以下技术: 将此标记放在您的表单上: 获得价值 打开表单,单击标签打开警报窗口 确保光标位于页面内容中(找到控件并单击) 右键单击控件并选择“查看源” 存在一堆div,因此请查找包含内容的div。
希望这有帮助。
答案 6 :(得分:0)
我最近遇到了类似的问题。我有一个页面通过Ajax加载显示不同的内容。有一个按钮可以触发服务器生成PDF图像。
我最初的解决方案是使用类选择器,它工作正常但与另一个开发人员产生摩擦。链接中已经有很多类,使用类作为标识符使代码变得丑陋。所以我使用了name属性:
<a name="printButton"....
$('a[name="printButton"]').on('click',function(){....
工作得很花哨!