2009-11-06 109 views
0

我想用它的innerHTML替換一個鏈接,它是如何完成的?使用innerHTML替換錨點

例子:

Bla bla bla <a href="#nogo">No link here</a> bla bla bla 

有可能成爲

Bla bla bla No link here bla bla bla 

試圖用它的innerHTML來取代節點,但我不能在節點本身的文本..

我猜測我必須使用正則表達式,但我無法弄清楚如何。

編輯:謝謝大家的快速反應!我似乎仍然無法做到。看起來還有更多事情要做。

我也使用原型js。

我收到了一些可能包含鏈接的文本。如果文本包含鏈接,則應該用它的innerHTML代替。 它看起來是這樣的:

<td id="text">This is some text <a href="/link/Go_%28To%29" title="Go (to)">goto</a>. Some more text.</td> 

我試着用hasChildNodes()來請檢查是否包含文本的鏈接,但它總是返回是,即使在文字中並未包含一個鏈接或其他元素。所以我認爲也許文本也被認爲是一個節點,並嘗試過childElements [1]。這返回undefined。所以也許鏈接是textnode的一個節點。沒有! 我正在抓取這些數據並刪除JSON,以避免可能出現的問題。走在DOM在響應的其餘部分進展順利,但..

然而,當我提醒

$('text').childElements()[0] 

實際HREF獲取的警告! (本地主機//鏈接/ Go_%28To%29)

$('text'.childElements()[0] .UP()讓我到實際TD父元素。

所以我用

if($('text').childElements()[0]) 

要請檢查是否包含文本的鏈接。

我想這變得有點離題,但我其實不能得到一個元素的權利。任何提示? 也許正則表達式是最好的選項?

+0

你有沒有什麼參考點?就像一個包裝的跨度或div,或者可能是鏈接的ID,如果它有一個? – thismat 2009-11-06 21:41:19

+0

您是否有任何要求保留鏈接本身可能存在的任何html?例如'foo'? – 2009-11-07 03:14:14

+0

不,沒有鏈接裏面有html的情況。 – richard 2009-11-07 08:38:27

回答

0

最後我解決了這個問題與一個醜陋的replace(/<\/?[^>]+(>|$)/g, "\n")。還有很多其他的事情我沒有記錄,我的錯。

1

設置outerHTMLinnerHTML ...

window.onload = function() { 
    var ancs = document.getElementsByTagName("A"); 

    for(var i = 0; l = ancs.length; i < l; i++) { 
    var anc = ancs[i]; 
    if(anc.href.substring(0, 1) == "#") 
     anc.outerHTML = anc.innerHTML; 
    } 
} 
+0

outerHTML ??不知道這一個...似乎只有IE瀏覽器,雖然這是一個FF解決方法:http://snipplr.com/view/5460/outerhtml-in-firefox/ – Wim 2009-11-06 21:48:57

4

試試這個:

var aElems = document.getElementsByTagName("a"); 
for (var i=0, n=aElems.length; i<n; ++i) { 
    var elem = aElems[i]; 
    elem.parentNode.replaceChild(document.createTextNode(elem.innerHTML), elem); 
} 
0

我強烈建議使用JavaScript庫這樣的工作之一。

這裏是一個一行使用原型,將這樣的伎倆:

$$('a').each(function(a) { a.replace(a.innerHTML) }) 

它只是通過各<在頁面中>標記迭代和其innerHTML的替換它。

jQuery對這類事情也很棒。

+0

這種方法也工作時,對象還沒有被附加到DOM呢? 它沒有爲我工作,但我也無法得到任何情況下的主播。 – richard 2009-11-06 22:33:22

+0

不好,恐怕你必須在DOM加載後運行它。 – 2009-11-09 18:11:00

0

或者另一種方式,中和鏈接(W/O jQuery的,我不喜歡):

創建測試環節:

javascript:var a=document.createElement("a");a.href="#nogo";a.innerText="NOGO";document.body.appendChild(a);void(0); 

和取消href屬性:

javascript:for(var i=0;i<document.links.length;i++)if(document.links[i].hash.toLowerCase()=="#nogo")document.links[i].removeAttribute("href");void(0); 

記,鏈接仍然有它的風格,你必須重置它也

0

這將在短,做你的工作:

var a = document.links;

for(var x = 0; x < a.length; x++){

a[x].outerHTML = a[x].innerHTML; x-- };

或代替以前的矛盾,可以使用一些 「純腳本魔法」,或未來的經典:

var a = document.links; 
while(a.length > 0){ a[0].outerHTML = a[0].innerHTML }