3

所以基本上这是我的脚本:

http://jsfiddle.net/JJFap/42/

代码 -

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 具有 rel 属性数组的跨度元素。

所以基本上在这个例子中它应该输出 -

Array (

   Array[0] => "Variable","Item","Something";

   Array[1] => "first","Third";

)

希望你明白我的意思:)

编辑:

在我的另一个示例中,我尝试首先在每个函数中添加 jQuery("span").each(function() ...,但它输出了两个带有 rel 的所有 span 元素的完整数组。我不能有不同的类/ID对于每个 div 元素,因为它们都将具有相同的类。

4

4 回答 4

5

jQuery('span')将在您的页面中查找所有跨度,然后拉出rel第一个的属性。由于您没有为该跨度搜索提供上下文,因此您将始终在文档中获得相同的 #1 跨度。

于 2012-07-17T14:15:00.443 回答
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文档中的第一个标签。

于 2012-07-17T14:14:52.157 回答
1

在该.each()方法中,您有几次此代码:jQuery("span").attr("rel"). 该代码只是在页面上查找所有 span标签。当您将其粘贴在.push()方法中时,它只会推送rel集合中第一个 jQuery 对象的属性值。相反,您想做类似$(this).find('span'). 这将导致它查找作为该方法正在迭代的当前元素span的后代的任何标签。.setting.each()

于 2012-07-17T14:16:35.663 回答
1

除了已经说过的,您还可以在使用时去掉countand以及在添加到选择器时去掉 :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);
});
于 2012-07-17T14:17:41.180 回答