所以基本上这是我的剧本:
代码 -
jQuery(document).ready(function() {
var rel = new Array();
var count = 0;
jQuery(".setting").each(function() {
rel[count] = [];
if(jQuery("span").attr("rel")) {
rel[count].push(jQuery("span").attr("rel"));
}
console.log(count);
count++;
});
jQuery("body").text(rel);
console.log(rel);
});
和
<div class="setting">
<span rel="Variable">Variable</span>
<span rel="Item">Item</span>
<span rel="Something">Something</span>
</div>
<div>
<span rel="Smth">Smth</span>
<span>Sec</span>
</div>
<div class="setting">
<span>Second</span>
<span rel="first">First</span>
<span rel="Third">Third</span>
</div>
我的问题是,为什么它显示变量,变量?
我希望它能显示变量,首先,但我无法做到。
基本上我想要实现的是创建新数组,其中插入每个div.setting span元素和rel属性数组。
所以基本上在这个例子中它应该输出 -
Array (
Array[0] => "Variable","Item","Something";
Array[1] => "first","Third";
)
希望你明白我的意思:)。
修改
在我的另一个例子中,我尝试添加jQuery(“span”)。每个(function()...首先在每个函数内部,但它输出两个完整的所有span元素的数组与rel。我不能有不同每个div元素的类/ ids,因为它们都具有相同的类。
答案 0 :(得分:5)
jQuery('span')
将在您的网页中找到所有范围,然后提取第一个rel
属性。由于您没有为该跨度搜索提供上下文,因此您将始终在文档中获得相同的#1范围。
答案 1 :(得分:4)
你应该使用这个:
jQuery('span',this).each(function() {
rel[count] = [];
if (jQuery(this).attr("rel")) {
rel[count].push(jQuery(this).attr("rel"));
}
console.log(count);
count++;
})
而不是:
rel[count] = [];
if(jQuery("span").attr("rel")) {
rel[count].push(jQuery("span").attr("rel"));
}
console.log(count);
count++;
http://jsfiddle.net/mblase75/JJFap/52/
诀窍是使用第二个.each
循环遍历每个span
内的所有<div class="setting">
标记 - 您的原始代码正在使用jQuery("span")
,这只会抓住每次都是文档中的第一个span
标记。
答案 2 :(得分:1)
在.each()
方法中,您有几次此代码:jQuery("span").attr("rel")
。该代码只是在页面上查找所有 span
标记。当你将它粘贴到.push()
方法中时,它只是推送集合中第一个jQuery对象的rel
属性的值。相反,你想做$(this).find('span')
之类的事情。这将导致它查找作为span
方法迭代的当前.setting
元素的后代的任何.each()
标记。
答案 3 :(得分:1)
除了已经说过的内容之外,您还可以在使用count
时摆脱push()
和jQuery.fn.map()
以及摆脱if
时的情况将[rel]
添加到选择器:
jQuery(document).ready(function() {
var rel = [];
jQuery(".setting").each(function() {
rel.push(jQuery(this).find('span[rel]').map(function() {
return this.getAttribute('rel');
}).get());
});
jQuery("body").text(rel);
console.log(rel);
});