2010-05-11 318 views
2

我想只插入一個<跨度>下面的文本(LINK前右側):JQuery - 如何添加一個HTML標籤到一些HTML?

<li><a href="">LINK</a></li> 

因此,上述成爲

<li><a href=""><span>LINK</a></li> 

這裏是我的jQuery代碼:

$('#mainnav li a').prepend('<span>'); 

當我v查看螢火蟲後的代碼,我看到<span></span>,我該如何獲得開啓span標籤而不是結束標籤?

+1

庵給我從開發商....究竟爲什麼你要創建HTML格式不正確? – cletus 2010-05-11 09:55:44

+0

好吧,我將添加結束標記,我需要先清理開始標記:| – 2010-05-11 09:57:00

+1

你應該重新考慮你的設置。如果它依賴於創建格式不正確的HTML,那麼它可能會被重寫爲更穩固的內容(以及XML/HTMLish)。或者你是否隱藏了我們的特定原因? – Boldewyn 2010-05-11 10:20:32

回答

6

首先,你要的是畸形的HTML。如果不是不可能創建它,jQuery將會很難。我會建議一步而不是多次。嘗試:

$("li > a").each(function() { 
    $(this).contents().wrapAll("<span>"); 
}); 

輸入:

<ul> 
    <li><a href="...">testing</a></li> 
    <li><a href="...">rich <b>content</b> with <i>inner tags</i></a></li> 
</ul> 

輸出:

<ul> 
    <li><a href="..."><span>testing</span></a></li> 
    <li><a href="..."><span>rich <b>content</b> with <i>inner tags</i></span></a></li> 
</ul> 
0

當您使用prepend時,您並未將標記文本添加到頁面,而是將元素添加到頁面。元素沒有「開始」和「結束」標籤,元素是元素。如果你想在span中包裝一堆元素(我猜這就是你想要的,如果你想在一個地方插入它的開頭,並在另一個地方插入它的結尾),你需要添加跨度到容器,然後將元素移入其中。

例如,這會將所有鏈接到元件foo,並將其移動到一個跨度內container

var stuff; 
var container; 

stuff = $('#foo a'); 
span = $("<span style='background-color: yellow'>"); 
span.append(stuff); 
$('#container').append(span); 
1

我不知道爲什麼你想要它,但它可以做到這樣,

$('#mainnav li a').html(function(i,v){ 
    return '<span>' + v; 
}) 
0

許多jQuery方法被設計爲僅從一半中自動創建元素對於.prepend(),例如,"<span>"將導致整個span元素被添加到DOM。或者,您將在Firebug中看到它,"<span></span>"首先插入到錨元素中。

我不明白你爲什麼會想創建無效的HTML,但如果你一定要,你可以這樣來做:

$("li > a").html("<span>"+$("li > a").html()); 

或者,如Reigel表明,一個匿名函數來html的()方法(我相當快寫我的回答,很明顯,unthoughtfully):

$("li > a").html(function (idx, html) { 
    return "<span>" + html; 
}); 

,否則,可能似乎是你想包裝錨元素的內容跨度。在這種情況下,你應該使用的jQuerywrappingmethods之一:

$("li > a").wrap("<span>"); 

你不是要同時創建開始元素和閉合件自己(使用jQuery的時候)。

3

我遇到了一個問題,我使用的第三方API使用PHP curl將平面HTML放入我的網頁。在返回的api HTML中有一些格式不正確的span標籤,這些標籤在IE中只能使我的渲染失效。我用Jquery的replaceWith()函數來解決這個問題。這裏有一個例子:

畸形的HTML:(注意,未開封span標籤)

<a class="aa_float_right aa_navlink" href="http:whatever">My Account</a></span> 

我的解決辦法:

$('.aa_navlink').replaceWith('<span class="test"><a class="aa_float_right aa_navlink" href="http:whatever">My Account</a>'); 

生成的HTML:

<span class="test"><a class="aa_float_right aa_navlink" href="http:whatever">My Account</a></span> 

BOOM我們現在有很好形成HTML不用謝謝如此糟糕的第三方API(我的意思是非常糟糕)。

此修復程序在SaltWater Co.