2017-06-13 37 views
0

我試圖在網站上的每條消息旁邊注入「表情符號」(充當按鈕)。例如:將文字注入div

example

這是目前我在做什麼:

contentscript.js:

document.getElementsByClassName("className").innerHTML = "➕"; 

這是不顯示任何。我也認爲它不會顯示在完整的左側;我怎樣才能做到這一點?

+2

getElement ** s ByClassName返回需要循環的元素集合。 –

+1

如果你只有一個className的元素,你可以嘗試像這樣document.getElementsByClassName(「className」)[0] .innerHTML =「➕」; –

+0

例如:[JS:使用Array.forEach遍歷getElementsByClassName的結果](https://stackoverflow.com/questions/3871547/js-iterating-over-result-of-getelementsbyclassname-using-array-foreach) –

回答

-1

如果只有一個與類名的DOM要添加的項目,你可以做到這一點

document.getElementsByClassName("className")[0].innerHTML += "➕"; 

使用+=運營商將新值追加到的當前值的項目innerHTML的

否則,你將不得不遍歷元素的集合返回(見上@Alexķ評論)

document.getElementsByClassName("className")[0].innerHTML += "<span class='icon'>➕</span>"; 
 

 
document.getElementsByClassName("icon")[0].addEventListener("click", clickFunction); 
 

 

 
function clickFunction(){ 
 
    alert("Clicked"+ this); 
 
}
/* add whatever styles you need here */ 
 
.className { 
 
    position: relative; 
 
    padding-left: 20px; 
 
} 
 

 
.icon { 
 
    color: red; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
}
<div class="className">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam iaculis non quam non tristique. Cras ut imperdiet quam, pellentesque finibus nisl. Sed egestas dapibus turpis a rhoncus.</div>

+0

追加到'Element.innerHTML'是一種*糟糕的*方式來實現這一點。一般來說,你應該避免操作'innerHTML'屬性。你完成的*完全替換了你選擇的元素中的所有HTML。由於它是完全新的DOM元素,所以以前在這些元素上的任何事件偵聽器都不再存在。此外,它可能會導致該頁面的該區域完全重新渲染,或更多。對於這樣的情況,你應該使用'Element.insertAdjacentHTML('before'nd','➕');' – Makyen

+0

@Mayyen我可以同意這一點。我通常在('click',...)上使用jquery,所以重新渲染不是問題。 – happymacarts