我想在一个页面中插入多行滑块。我有一块代码,我想重复使用,但它会插入2个DIV与id=slider
...jQuery:重命名重复的id
是否有可能找到第二个元素id=slider
并重命名为id=slider01
?
BR。安德斯
我想在一个页面中插入多行滑块。我有一块代码,我想重复使用,但它会插入2个DIV与id=slider
...jQuery:重命名重复的id
是否有可能找到第二个元素id=slider
并重命名为id=slider01
?
BR。安德斯
尝试
$('div[id="slider"]:eq(1)').attr("id", "slider01");
http://jsfiddle.net/rYyA7/ - 在IE6/8,火狐,Safari,Chrome和Opera测试。
你可以通过在之前指定一个新的id
来做到这一点,你可以将第二个滑块添加到页面中。你还没有显示你如何做的代码,所以很难就如何做到这一点提供建议,但它是最好的。
当文档暂时无效时,可能会找到第二个滑块,但可能会很尴尬。这又取决于你的代码。如果你已经有了一个包含第二个滑块的jQuery对象的引用,作为你如何创建它的副产品,这很容易(只需使用yourvar[1].id = newavlue
)。如果没有,你可能是最好关闭的其他东西滑块有共同点的基础上进行搜索,好比说,如果他们俩都div
s的类slider
:
var sliders, ids;
sliders = $("div.slider");
if (sliders.length > 1) {
ids = {};
sliders.each(function() {
if (ids["x" + this.id]) {
// This ID has already been used, grab a new one
this.id = 'newslider' + new Date().getTime();
}
else {
// This ID hasn't been used yet; flag that we're using it
ids["x" + this.id] = true;
}
});
}
该代码遍历所有的匹配元素并确保没有重复的ID(有几个注意事项,主要是没有以“newsliderNNNNNNNNNN”形式存在的ID,其中Ns是由new Date().getTime()
返回的数字)。 (关于在ids
对象的属性名称中的“x”前缀只是为了防御与预先存在的性能意外碰撞,像toString
。嘿,这是一个有效的id
,有人可能使用它。:-))
Andy E's head's answer提供了一个更简短的方法,它可能是一种方法,但它假定基于id
属性的搜索不会在某个阶段进行优化,从而停止查找多个元素。这个假设可能是有效的,但依靠选择器实现不会改变下线并在我的代码中引入问题,我会感到不舒服。 (在过去几年中,选择器的工作很多,当前的jQuery引擎Sizzle是全新的。)但是,它可能没问题。
Lol我的回答突然变得相当有争议:-)你提出了一个有效的观点,虽然我认为这是有道理的,属性等于选择器的工作和他们一样,我会把钱放在事实上,他们没有优化像这样的原因。许多其他选择器都进行了优化,它会让你想知道为什么他们忽略了属性equals选择器。 – 2010-06-08 11:15:39
进一步的说法是,在许多情况下,如果可用,Sizzle依赖浏览器的'querySelectorAll'实现。这在将来也可能仍然如此。顺便说一句:+1)一个好的答案:-) – 2010-06-08 11:17:16
@Andy E的头:是的,这样做可能很好,而且它非常直接,而且很短(短〜=较少代码来维护〜=好)。我刚刚被这样的事情叮叮当当,这让我非常谨慎。 – 2010-06-08 11:23:39
我会做这样的:
$('div[id="slider"]').not(':eq(0)').each(function(i){ //selects all divs with the id slider but not the first one
var $that = $(this),
newID = $that.attr('id') + (i + 1) // adds a incising number to the ID's
$that.attr('id', newID) // sets the new id
})
检查这里的例子: http://jsfiddle.net/nuW34/
是否'code'的一个块表示HTML或JavaScript? – jAndy 2010-06-08 11:03:47