用其innerHTML替换锚点

时间:2009-11-06 21:39:12

标签: javascript regex replace 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]。返回undefined。因此,链接可能是textnode的节点。没有! 我正在抓取这些数据并逐出JSON,因此可能会产生这种奇怪的现象。尽管如此,在其余的响应中走DOM也很顺利。

然而,当我提醒

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

实际 href 得到警告! (本地主机//链路/ Go_%28To%29)

$('text'.childElements()[0] .up()让我看到实际的td父元素。

所以我正在使用

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

要检查文本是否包含链接。

我想这有点偏离主题,但实际上我无法正确得到一个元素。有小费吗? 也许regexp是最好的选择?

6 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我强烈建议您使用其中一个Javascript库进行此类工作。

这是一个使用Prototype的单线程,可以解决这个问题:

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

它简单地遍历每个&lt; a&gt;。在页面中标记并用其innerHTML替换它。

jQuery对于这类事情也很棒。

答案 3 :(得分:0)

或者换句话说,中和一个链接(没有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);

注意,链接仍有其样式,您还必须重置它

答案 4 :(得分:0)

最后,我用丑陋的replace(/<\/?[^>]+(>|$)/g, "\n")解决了这个问题。还有很多其他的事情我没有记录好,我的错。

答案 5 :(得分: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 }