我試圖在網站上的每條消息旁邊注入「表情符號」(充當按鈕)。例如:將文字注入div
。
這是目前我在做什麼:
contentscript.js:
document.getElementsByClassName("className").innerHTML = "➕";
這是不顯示任何。我也認爲它不會顯示在完整的左側;我怎樣才能做到這一點?
我試圖在網站上的每條消息旁邊注入「表情符號」(充當按鈕)。例如:將文字注入div
。
這是目前我在做什麼:
contentscript.js:
document.getElementsByClassName("className").innerHTML = "➕";
這是不顯示任何。我也認爲它不會顯示在完整的左側;我怎樣才能做到這一點?
如果只有一個與類名的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>
追加到'Element.innerHTML'是一種*糟糕的*方式來實現這一點。一般來說,你應該避免操作'innerHTML'屬性。你完成的*完全替換了你選擇的元素中的所有HTML。由於它是完全新的DOM元素,所以以前在這些元素上的任何事件偵聽器都不再存在。此外,它可能會導致該頁面的該區域完全重新渲染,或更多。對於這樣的情況,你應該使用'Element.insertAdjacentHTML('before'nd','➕');' – Makyen
@Mayyen我可以同意這一點。我通常在('click',...)上使用jquery,所以重新渲染不是問題。 – happymacarts
getElement ** s ByClassName返回需要循環的元素集合。 –
如果你只有一個className的元素,你可以嘗試像這樣document.getElementsByClassName(「className」)[0] .innerHTML =「➕」; –
例如:[JS:使用Array.forEach遍歷getElementsByClassName的結果](https://stackoverflow.com/questions/3871547/js-iterating-over-result-of-getelementsbyclassname-using-array-foreach) –