2009-11-06 100 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 }