2009-06-27 49 views
7

如果我有两个div,id =“myDiv”重复id的拧jQuery选择器?

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

如何更改它淡出哪一个?

注:我知道重复的ID是违反标准,但我使用fancybox模式弹出窗口,它复制了页面上指定内容的弹出窗口的内容。如果有人知道解决方法(也许我使用fancybox错误),请让我知道。

+1

你试过了吗? – 2009-06-27 23:58:21

+0

是的,但我希望如果我问别人他们可能会给我一个解释,为什么只有第一个被淡出。 – Matt 2009-06-28 00:33:41

+0

它重复吗?或将内容“移动”到弹出窗口位置? – scunliffe 2009-06-28 02:43:07

回答

6

jQuery在查询ID时恰好匹配一个元素。一个最多有一个Element对象的数组将返回$("#foo").get()。有关更多信息,请参阅jQuery documentation,或自行尝试。

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

元素ID应该是唯一的。具有相同ID的多个DIV将是不正确且不可预知的,并且违背该ID的目的。如果你这样做:

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

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

7

”注意:我知道重复的ID是违反标准的“

然后不要这样做。你已经弄清楚了两个问题。它违反了标准,并且干扰了jQuery(实际上是常规的DOM)选择机制。未来可能会有更多问题。

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

0

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

我能够选择的控制,并获得它的使用以下格式选择值DIV:

$(” #fancy_div [id = InputText]')。val();

您的控件可能存在于Fancybox的其他地方。最好的办法是看看viewsource,但这很棘手。

要进入查看源代码,使用以下技术: 将这个标签您的形式: 获得价值 打开表单,点击标签,打开警报窗口。
确保您的光标在页面内容中(找到控件并单击)。
右键单击控件并选择“查看源代码”。
存在一堆div,因此请查找包含您的内容的div。

希望这会有所帮助。

1

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

$('[id=myDiv]'); 

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

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

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

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

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

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

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

我原来的解决方案是使用类选择器,它运行良好,但与其他开发人员发生摩擦。链接中已经有很多类,使用类作为标识符使代码变得丑陋。所以我用了一个名字属性:

<a name="printButton".... 

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

工作只是丹迪!