[英]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.