我有一个动态生成的ol li列表,每个li都有一个带有for属性的label。
如下所示:
<ol id="altErrorCont" class="error-container">
<li>
<label class="error" for="dobMonth">Enter the month you were born</label>
</li>
<li>
<label class="error" for="dobDay">Enter the day you were born</label>在页面加载时,我想用一个a标记包装标签,该标签在包装的标签中包含for标记的锚。这就是我想要发生的:
<ol id="altErrorCont" class="error-container">
<li>
<a href="#dobMonth">
<label class="error" for="dobMonth">Enter the month you were born</label>
</a>
</li>
<li>
<a href="#dobDay">
<label class="error" for="dobDay">Enter the day you were born</label>
</a>这是我写的,但不管用
var labelFor = $("ol#altErrorCont li label").each(function(){
$(this).attr("for");
});
$('ol#altErrorCont li > label').wrap('<a href="#'+ labelFor +'">');它将返回每个包装标签的<a href="#[object Object]">。有人能为我指出正确的方向或解释为什么会发生这种事吗?
提前谢谢。
发布于 2016-10-13 18:14:12
jQuery的.each()方法返回jQuery对象。当您在string contcatenation中使用它时,JavaScript会对其调用toString()方法。由于jQuery没有自己定义的toString方法,所以它调用在返回[object Object]的Object.prototype上定义的方法。
下面是我要做的事情:
var labelFor = $("ol#altErrorCont li label").each(function(){
$(this).wrap('<a href="#'+ $(this).attr("for") +'">');
});发布于 2016-10-13 18:17:27
each只是提供了一种遍历一组项的方法。您从labelFor获得的值将与您所得到的相同
var labelFor = $("ol#altErrorCont li label");如果要将每个label包装在一个链接中,可以在each循环期间执行一些操作。
$("ol#altErrorCont li label").each(function() {
var $this = $(this); // Faster than always doing $(this)
var label = $this.attr('for');
$this.wrap('<a href="' + label + '">');
});发布于 2016-10-13 18:17:39
这是因为“每个”方法返回一个jQuery对象,您可以在“每个”方法中移动如下:$('ol#altErrorCont li > label').wrap('<a href="#'+ labelFor +'">');:
$(this).wrap('<a href="#'+ $(this).attr("for") +'">');https://stackoverflow.com/questions/40028095
复制相似问题