2012-02-07 124 views
4

我試圖添加每個span的內容以及title屬性中的值。添加包含元素以及數組

<div id="group-wrap" class="group"> 
    <span class="lbracket" title="&f">(</span> 
    <span class="grouptitle" title="&f"> Group </span> 
    <span class="rbracket" title="&f">) </span> 
    <span class="username" title="&f"> Username </span> 
    <span class="col" title="&f">:</span> 
    <span class="text" title="&f"> Helo There! </span> 
</div> 

這是我到目前爲止有:

var str = []; 
    $('#group-wrap span').each(function(){ 
     str.push($(this).attr('title')); 
    }); 
    alert(str.join('')); 
}); 

http://jsfiddle.net/B9QeK/3/

輸出爲&f&f&f&f&f(每個標題屬性的值),但預計輸出具有價值,加上內容在跨度中。該屬性的值應該添加在內容之前。

&f(&fGroup&f)&fUsername: &f text 

我該如何得到這個結果?

回答

2

看起來你正在尋找

str.push(this.getAttribute('title'), this.textContent || this.text); 

至於性能方面的原因,你不應該重新創建爲每一個迭代jQuery對象。更好的是,不要使用jQuery來接收這些值。

JSFiddle

順便說一下,你可以讓jQuerys .map()的使用做一點更優雅:

jQuery(function($){ 
    var str = $('#group-wrap span').map(function(){ 
     return this.getAttribute('title') + this.textContent || this.text; 
    }).get(); 

    alert(str.join('')); 
}); 

JSFiddle

參考:.map()

1

只需使用text方法獲取每個span的文本內容:

var str = []; 
    $('#group-wrap span').each(function(){ 
     //Push value of title attribute and text content into array: 
     str.push($(this).attr('title') + $(this).text()); 
    }); 
    alert(str.join('')); 
}); 
1

你行

str.push($(this).attr('title')); 

應該像這樣:

str.push($(this).attr('title') + $(this).text()); 

雖然,這使得兩個相同的電話$(this),所以你可能會缺點IDER緩存:

var $this = $(this) 
str.push($this.attr('title') + $this.text()); 
2
jQuery(function($){ 
    var str = []; 
    $('#group-wrap span').each(function(){ 
     str.push($(this).attr('title') + $(this).text()); 
    }); 
    alert(str.join('')); 
}); 

Working JSFiddle

text

說明:獲取每個元素的組合的文本內容集合中匹配的元素,包括其後代。

docs

1
var str = ""; 
    $('#group-wrap span').each(function(){ 
     str+=$(this).attr('title')+$(this).text(); 
    }); 
    alert(str); 
});