у меня есть следующий код:
function getArticleContent() {
var toPromote = 'example';
var toReplace = '<a href="/tags/'+toPromote+'">'+toPromote+'</a>';
var content = $(".a-entry").text();
if (content.search(toPromote) > -1)
{
$('.a-entry').html($('.a-entry').html().replace(new RegExp(toPromote, "g"), toReplace) );
}
else
{
//
}
}
$(document).ready(function() {
getArticleContent();
});
Код хорошо работает, но если изображение или ссылка имеет заголовок или атрибут высокого звука, равный с текстом, что я хочу заменить HTML, это повреждается, потому что put's сценария ссылка в высоком звуке или заголовок отмечает.
С уважением
Я пытаюсь сделать что-то вроде этого:
<div id="article">
<p>Some text here, bla bla.</p>
</div>
После того, как JS функционируют, я хочу быть:
<div>
<p>Some text <a href="/tags/here">here</a>, bla bla.</p>
</div>
Вы можете сделать что-то вроде этого, хотя может быть более короткий способ (текстовые узлы - очень редкость для меня):
function getArticleContent() {
var toPromote = 'example';
$(".a-entry").contents().filter(function() { return this.nodeType == 3; })
.each(function() {
if(this.nodeValue.indexOf(toPromote) > -1)
$(this).replaceWith(this.nodeValue.replace(new RegExp(toPromote, "g"),
function(m) { return '<a href="/tags/'+m+'">'+m+'</a>'; })
);
});
}
$(getArticleContent);
Вы можете попробовать демо здесь . Он фильтрует текстовые узлы, в частности nodeType == 3
, для .each ()
из них, он проходит цикл и, если текст есть, заменяет каждое совпадение соответствующей ссылкой.
Попробуйте использовать тег jQuery .attr() для замены в теге атрибута href или .text(), если вы хотите изменить именно это.
В противном случае, возможно, будет полезно показать некоторую разметку, чтобы увидеть, что именно вы хотите (примеры до/после).
.attr('href',yournewstuff);
OR
.text(yournewstuff);