如何在Javascript文本节点中获取HTML标记?

时间:2012-06-04 20:53:29

标签: javascript html text tags

我的问题在标题中得到了很好的解释。如何在Javascript文本节点中获取HTML标记?我的代码在页面上的结果是......

<a href="http://www.example.com">Click Here</a>

但是,我希望“点击此处”成为一个链接。我是Javascript的新手,所以这对我帮助很大。以下是我正在谈论的一个例子......

<div id="mydiv">
</div>
<script type="text/javascript">
var mynode=document.createTextNode('<a href="http://www.example.com">Click Here</a>');
document.getElementById('mydiv').appendChild(mynode);
</script>

4 个答案:

答案 0 :(得分:7)

您无法在文本节点中放置链接。链接是元素。元素可以(有时)包含文本节点,但反之则不然。

您需要创建一个元素,在其上设置属性,然后将文本附加到该元素。

var link = document.createElement('a');
link.setAttribute('href', 'http://www.example.com');
link.appendChild(document.createTextNode('Click Here'));
document.getElementById('mydiv').appendChild(link);

答案 1 :(得分:1)

<div id="mydiv">
</div>

<script type="text/javascript">

    var element = document.createElement('a');
    element.setAttribute("href","http://www.example.com");
    element.appendChild(document.createTextNode('Click Here'));
    document.getElementById('mydiv').appendChild(element); </script>

</script>

答案 2 :(得分:0)

您正在寻找document.createElement,而不是document.createTextNode。文本节点不能包含HTML。

一个简单的替代方案,如果你没有使用复杂的Javascript(你似乎不是),那就是:

document.getElementById('mydiv').innerHTML.='<a href="http://www.example.com">Click Here</a>';

答案 3 :(得分:0)

我需要在文本节点的中间插入一个元素(用span替换一个单词)。我是通过完全替换文本节点来完成的:

(使用jQuery)

function replace_text(element, search, replacement_html){
  if(!element) element=document.body;
  var nodes=element.childNodes;
  for(var n=0;n<nodes.length;n++){
    if(nodes[n].nodeType==Node.TEXT_NODE){
      if(nodes[n].textContent.match(new RegExp(that.escapeRegExp(search),'gi'))){
        var newtextContent=nodes[n].textContent.replace(
              new RegExp(escape_regex(search),'gi'), replacement_html);
        $(nodes[n]).before(newtextContent).remove();
      }
    } else {
      replace_text(nodes[n], search, replacement_html);
    }
  }
}

function escape_regex(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}

然后致电:

$('.highlight_terms_here').each(function(){
  replace_text(this, 
              the_word, 
              '<span style="background-color: yellow">'+the_word+'</span>');
})

或者简单地说:

  replace_text($('#contents')[0], the_word, 
              '<span style="background-color: yellow">'+the_word+'</span>');