2017-01-15 92 views
4

,我有以下div S IN的HTML頁面獲取的innerHTML從選擇

<div class="foo">Bar</div> 
<div class="foo">Baz</div> 

我想獲得與包含在兩個div S中的文本的數組:

['Bar', 'Baz'] 

我可以使用d3.nodes這樣做,但它看起來有點笨重。有更聰明的方法嗎?

d3.selectAll(".foo").nodes().map(function(d) { return d.innerHTML; }); 

答案可能是純Javascript,當然!

+3

Ø如果選擇,我喜歡你最好的方式。 – Mark

+1

我第二上面的評論。你的代碼比所有提供的答案要好。 –

回答

1

這與香草的JavaScript(ES6)很容易地可能的:

let elements = document.querySelectorAll('.foo') 

let texts = [] 

for(let element of elements) { 
    texts.push(element.innerText.toLowerCase()) 
} 

console.log(texts) 

此輸出["bar", "baz"],可以看出here

ES5 version

var elements = document.querySelectorAll('.foo') 

var texts = [] 

elements.forEach(function(element) { 
    texts.push(element.innerText.toLowerCase()) 
}) 

console.log(texts) 
+0

看上'toLowerCase'問題!儘管如此,這只是一個錯字! – LondonRob

3
var text = []; 
document.querySelectorAll(".foo").forEach(function(e){ 
    text.push(e.textContent); 
}); 
0

這個問題有很簡單的答案,你必須使用d3.selectAll()和像下面text功能:

var array=[]; 
d3.selectAll(".foo").each(function(d,i){ 
    array.push(d3.select(this).text()); 
}); 
1

給出幾點意見,以原來的職位,這似乎是最光鮮的方式(到目前爲止!)。

使用selection.nodes()讓你進入到選擇背後的DOM元素:通過使用本地JavaScript Array.map

var fooDivs = d3.selectAll(".foo").nodes() 

現在,您可以用它來讓你的心臟期望的任何HTML/CSS屬性:

fooDivs.map(function(d) { 
    return d.innerHTML; 
}); 

或者,對於那些誰愛的俏皮話:

d3.selectAll(".foo").nodes().map(function(d) { return d.innerHTML; });