簡體   English   中英

將錨替換為其innerHTML

[英]Replace an anchor with its 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()檢查文本是否包含鏈接,但是即使文本不包含鏈接或其他元素,它也始終返回yes。 因此,我認為也許文本也被視為節點,並嘗試使用childElements [1]。 返回未定義。 因此,也許鏈接就是textnode的一個節點。 沒有! 我正在抓取這些數據並評估JSON,因此可能會因此而產生怪異。 不過,在其余的響應中遍歷DOM仍然很順利。

但是當我提醒

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

實際的href獲取提醒! (本地主機//鏈路/ Go_%28To%29)

$('text'.childElements()[0] .up()將我帶到實際的td父元素。

所以我正在使用

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

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

我想這有點題外話,但實際上我不能正確地使用a元素。 有小費嗎? 也許正則表達式是最好的選擇?

嘗試這個:

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);
}

outerHTML設置為innerHTML ...

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;
  }
}

我強烈建議使用其中一個Javascript庫進行此類工作。

這是一個使用Prototype的單行代碼,可以完成此操作:

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

它只是簡單地遍歷頁面中的每個<a>標記,並用其innerHTML替換它。

jQuery對於這種事情也很棒。

或以另一種方式中和鏈接(不使用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);

請注意,鏈接仍然具有其樣式,您還必須重置它

最后,我用難看的replace(/<\\/?[^>]+(>|$)/g, "\\n")解決了這個問題。 我還有很多其他事情沒有得到很好的記錄,我的錯。

簡而言之,這可以完成您的工作:

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 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM