2012-06-04 5 views
1

мой вопрос был в значительной степени объяснен в заголовке. Как получить HTML-теги внутри текстового узла Javascript? Результат моего кода на странице ...Как получить HTML-теги внутри текстового узла Javascript?

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

Однако я хочу, чтобы «Click Here» была ссылкой. Я новичок в 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> 
+1

Просто, чтобы убедить вас, что jQuery стоит проверить ... это невероятно просто с jQuery (или аналогичными библиотеками): '$ ('# mydiv'). append ('...');' как ответ показывает Квентин, это совсем немного сложнее с простым DOM. –

ответ

7

Вы не можете поместить ссылки в текстовый узел. Ссылки - это элементы. Элементы могут (иногда) содержать текстовые узлы, но обратное неверно.

Вам необходимо создать элемент, установить на него атрибуты, а затем добавить текст к этому элементу.

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

Вау, это был мой первый вопрос о переполнении стека, и я получил отличный ответ очень быстро. Я предполагаю, что это прощание с Yahoo Answers ... – Sabreok

+0

Учитывая, что OP является новым для JavaScript, я бы рекомендовал использовать свойство 'href', а не' setAttribute() ', которое разбито в более старом IE и почти всегда не нужно. –

0

Вы ищете document.createElement, не document.createTextNode. Текстовые узлы не могут содержать HTML.

Простая альтернатива, если вы не используете сложные Javascript (который, кажется, вы не) будет просто:

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

Изменение innerHTML является рискованным, потому что оно, вероятно, сломает все обработчики событий, привязанные к существующим дочерним элементам mydiv. –

+0

Или '.innerHTML + = ...' при условии, что OP пытается добавить. (И имея в виду, что сказал Ян.) – nnnnnn

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> 
+0

Упс, не видел, что уже ответили. – mari

+0

Добро пожаловать в переполнение стека! Пожалуйста, помните, что вы * абсолютно * хорошо, чтобы публиковать ответы на ответные вопросы; но, пожалуйста, подумайте о том, чтобы прочитать [страницы редактирования вниз] (http://stackoverflow.com/editing-help) для того, как показывать код в ваших ответах. –

0

мне нужно, чтобы вставить элемент в середину текстовый узел (замените слово слоем). Я сделал это, заменив текстовый узел в целом:

(использует 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>'); 
Смежные вопросы