我想在一个页面中插入多个滑块.我有一块我想重用的代码,但它会插入2个DIV id=slider
...
是否可以找到第二个元素id=slider
并重命名为id=slider01
?
BR.安德斯
尝试
$('div[id="slider"]:eq(1)').attr("id", "slider01");
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/rYyA7/ - 在IE6/8,Firefox,Safari,Chrome和Opera中测试过.
id
在将第二个滑块附加到页面之前,您最好通过分配新功能来完成此操作.你还没有展示出你如何做的代码所以很难就如何做到这一点提出建议,但这样做会是最好的.
当您的文档暂时无效时,可以在之后找到第二个滑块,但这可能很尴尬.这又取决于你的代码.如果你已经有一个包含第二个滑块的jQuery对象的引用,作为你如何创建它的副产品,它很容易(只是使用yourvar[1].id = newavlue
).如果没有,你可能最好根据滑块有共同点的其他东西进行搜索,比如说如果它们都是div
同类的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;
}
});
}
Run Code Online (Sandbox Code Playgroud)
该代码遍历所有匹配元素,并确保没有重复的ID(有几个警告,主要是"newsliderNNNNNNNNNN"形式中没有ID,其中Ns是返回的数字new Date().getTime()
).(ids
对象中属性名称的"x"前缀只是为了防止与预先存在的属性的意外冲突,例如toString
.嘿,它是有效的id
,有人可能会使用它.:-))
Andy E的头部答案提供了一种更短的方式,可能是一种方法,但它假设基于id
属性的搜索不会在某个阶段得到优化,以至于它停止找到多个元素.这个假设可能是有效的,但我依赖于选择器实现而不是在线下更改并在我的代码中引入一个问题,我会感到很不舒服.(过去几年在选择器方面做了很多工作;例如,当前的jQuery引擎Sizzle是全新的.)但同样,它可能没什么问题.