2012-03-28 67 views
0

我得到這個:爲什麼我的JQuery.after()在元素之前插入代碼?

   $('input[name=whatWeLove1]').before('<ul><li>'); 
       $('input[name=whatWeLove1]').after('</li></ul>'); 

,併產生這樣的:

<ul> 
    <li> 
    </li> 
</ul> 
<input type="text" name="whatWeLove1" class="" maxlength="40"> 

爲什麼?

乾杯, 斯特凡

+3

這裏最根本的一點是,你在HTML標記來思考,但你不處理一旦加載頁面就會帶有標記,您正在處理DOM樹 - 實際對象圖中的實際對象。 – 2012-03-28 09:39:07

回答

2

它可能是因爲你輸入破損的代碼(在你修復它之前)...所以瀏覽器(或可能是螢火蟲或可能jQuery)試圖顯示它正確格式化/修復。

達到你想要做什麼,最好的辦法是使用.wrap()

$('input[name=whatWeLove1]').wrap('<ul><li>');

+0

你不需要關閉標籤。 – Jivings 2012-03-28 11:16:55

+0

夠公平:)冷靜 – 2012-03-28 14:45:00

1

我想你想

$('input[name=whatWeLove1]').wrap('<ul>').wrap('<li >'); 
+1

打我吧。但是你只需要一個換行功能。 – Jivings 2012-03-28 09:38:20

3

因爲jQuery將自動假設你不想只是插入打開標籤和關閉元素爲您服務。

你想用.wrap();

$('input[name=whatWeLove1]').wrap('<ul><li>'); 
1

,因爲你之前插入的元素:

$('input[name=whatWeLove1]').before('<ul><li>'); 

這種自動關閉元素的輸入元素之前,以防止錯誤的標記。

您可以創建<ul><li>結構,然後插入您的輸入或直接輸入wrap()

2

JQuery操作DOM,而不是HTML。這是一個微妙的區別,但它意味着它不會讓你產生無效的HTML。運行第一行會生成不匹配的標籤,直到您運行第二行,並且它不會讓您這樣做

您需要使用wrap函數,正如@NicolaPeluchetti所述。

相關問題