2013-10-11 43 views
26

我怎麼能在純JavaScript重寫這個jQuery的操作之前:插入HTML中的JavaScript元素沒有jQuery的

$("#my_id").before('<span class="asterisk">*</span>'); 
+5

這是我們問「爲什麼」?每個人都有其理由。也許他誤導了不想使用jQuery,但他來這裏是爲了瞭解如何在沒有jQuery的情況下做到這一點,不要因爲不使用它而受到懲罰...... – Codemonkey

+4

沒有評論或編輯的downvoting不會幫助他。它不是說「歡迎」的方式... – TheBronx

+1

'document.getElementById('my_id')。before(span)'這是香草JS,加入ES5 – Gibolt

回答

46

這將做你想做的,而不需要像jQuery任何臃腫庫的支持。

var my_elem = document.getElementById('my_id'); 

var span = document.createElement('span'); 
    span.innerHTML = '*'; 
    span.className = 'asterisk'; 

my_elem.parentNode.insertBefore(span, my_elem); 
+0

謝謝。這對我來說很有用。 –

+3

能夠幫助別人做出改變真是太好了,通常是我問問題! – Codemonkey

+2

我建議使用Rob W的insertAdjacentHTML answer,FWIW。 – Codemonkey

7

你可以讓你自己的函數在JavaScript中一樣,

代碼

var id = document.getElementById('my_id'); 
var s = document.createElement('span'); 
s.innerHTML = '*'; 
s.className = 'asterisk'; 
id.parentNode.insertBefore(s, id); 

InsertBefore Docs and Example

您可以像以前一樣創建一個函數

​​

源從http://code.jquery.com/jquery-1.9.1.js

+0

謝謝你的回答。 –

75

一個鮮爲人知的方法是element.insertAdjacentHTML。使用這種方法(由所有主流瀏覽器支持,包括IE 4),您可以採用任意HTML字符串,並將其插入文檔中的任何位置。

說明了該方法的力量,讓我們用你的例子...:

$("#my_id").before('<span class="asterisk">*</span>'); 

變爲

document.getElementById('my_id').insertAdjacentHTML('beforebegin', 
    '<span class="asterisk">*</span>'); 

insertAdjacentHTML的第一個參數確定插入位置。下面是使用jQuery的比較:

正如你所看到的,這是非常容易使用。假設jQuery選擇器只返回一個元素,通常可以使用document.querySelector,但在這種特定情況下,使用document.getElementById會更有效。

+0

很酷。我不知道這件事。謝謝。 –

+7

@AymandOsanes考慮接受這個答案,而不是另一個。大多數用戶都知道像「insertBefore」和「appendChild」這樣的標準DOM方法,但是「insertAdjacentHTML」只是坐在一個滿是灰塵的角落。通過接受答案,它會碰到頂端,這將是用戶訪問此頁面時看到的第一個。 –

+0

一個我從來不知道的好方法。 –