不重复ID的搞砸了jQuery选择?
-
20-08-2019 - |
题
如果我有两个div,都具有ID = “myDiv”
会$("#myDiv").fadeOut();
淡出两者的div了呢?还是会褪色只有第一/第二?或者根本就没有?
我如何改变它淡出哪一个?
注意:我知道重复的ID是对标准,但我使用的fancybox模式弹出并复制了弹出窗口的内容网页上指定的内容。如果有人知道解决这个(也许我使用的fancybox错误)的方式请让我知道。
解决方案
jQuery的恰好一个要素查询的ID时相匹配。至多一个Element
对象的阵列将由$("#foo").get()
返回。见 jQuery文档了解更多信息,或者自己尝试一下。
$(function() {
alert($("#foo").length);
});
其他提示
元素的ID应该是唯一的。具有相同ID的多个div将是不正确的,不可预测的,蔑视ID的目的。如果你这样做:
$('.myDiv').fadeOut();
这将淡化他们两个了,假设你给他们一个班myDiv和唯一ID(或没有)的。
“注:我知道的副本ID的是对标准”
然后不这样做。你已经想通了两个问题。它违反了标准,并与jQuery的(实际上经常DOM的)选择机制干扰。有可能会在未来更多的问题。
很可能,你的是的使用的fancybox错了,在这种情况下,我希望有人熟悉它可以帮助你。更糟的是,如果脚本本身是有缺陷的,你不应该使用它。
由于$(“#myDiv”)将只与ID返回第一个div,你必须找到使用这一招与该ID的所有元素:
$('[id=myDiv]');
所以,你的情况下,在淡出适用于所有这些div的:
$('[id=myDiv]').fadeOut();
如果你想确保你的页面没有这个ID两次,然后你可以这样做,删除多余的:
$('[id=myDiv]:gt(0)').remove();
您也可以去使用find途径()。发现将返回所有的元素与ID,你可以在需要的范围限制在一个特定的父母尝试像$(document).find('#myDiv').fadeOut();
或
$('.parentElement').find('#myDiv').fadeOut();
我遇到同样的问题。显然,当您从您想要打开的fancybox页面上的内容,它创建的原始内容的镜像股利。在我的情况下,控制被包裹在该的fancybox创建名为一个div“fancy_div”
我能够选择控制,并得到它的值通过使用用于选择以下格式:
$( '#fancy_div [ID =的inputText]')VAL();
您的控件可以在的fancybox内的其它地方存在。做的最好的事情就是看viewsource,但它的棘手。
要得到的视图源,使用以下技术: 请将您的形式对这个标签: 获取价值 打开表单,点击标签,打开警报窗口。点击 确保你的光标在网页内容(找到控制和点击)内。结果 右键点击了控制,并选择“查看源文件”。点击 div的一束存在,所以查找包含内容的DIV。
希望这有助于。
我最近有类似的问题。我有通过Ajax负载显示不同内容的单页。有触发服务器生成PDF图像的按钮。
我的原始的解决方案是使用一个类选择器,它工作得很好,但引起摩擦与另一显影剂。在使用类作为标识符使代码丑陋的链接有这么多的班了。因此,我使用的名称属性:
<a name="printButton"....
$('a[name="printButton"]').on('click',function(){....
工作只是花花公子!