Изменения в jQuery внутреннего текста, но сохранить в формате HTML
Я хотел бы изменить текст HTML-элемента, но сохранить остальную часть внутреннего html с помощью jQuery.
например:
<a href="link.html">Some text <img src="image.jpg" /></a>
заменить "Некоторый текст" на "другой текст", и результат должен выглядеть так:
<a href="link.html">Other text <img src="image.jpg" /></a>
изменить:
Мое текущее решение заключается в следующем:
var aElem = $('a');
var children = aElem.children();
aElem.text("NEW TEXT");
aElem.append(children);
но должен быть какой-то более элегантный способ сделать это.
14 ответов:
Это, кажется, работает просто отлично.
<html> <head> </head> <body> <a href="link.html">Some text <img src="img.jpg" /></a> </body> </html> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script> <script type="text/javascript"> $(function(){ var $link = $('a'); var $img = $link.find('img'); $link.html('New Text'); $link.append($img); }); </script>
Так как вы не можете изменить ссылку вариант будет просто использовать
replace$("a").html($("a").html().replace("Some text", "Other text"));пример jsfiddle.
обернуть текст, который вы хотите изменить в течение
<a href="link.html"><span>Some text</span> <img src="image.jpg" /></a> $('a span').html( 'new text' );
мое решение, хотя и немного запоздало.
$('a').each(function() { var contents = $(this).contents(); if (contents.length > 0) { if (contents.get(0).nodeType == Node.TEXT_NODE) { $(this).html('NEW TEXT').append(contents.slice(1)); } } });некоторые замечания:
contents()включает в себя текстовые узлы, в отличие отchildren().- необходимо создать скопировать содержимое через
var contents = ...или же остальные элементы теряются навсегда после замены на$(this).html('NEW TEXT').- The
lengthрегистрация необязательна, но рекомендуется.- The
nodeTypeрегистрация необязательна, но рекомендуется.
альтернативным способом было бы использовать
contents()метод следующим образом:дано
<a href="link.html">Some text <img src="image.jpg" /></a>вы можете заменить
'Some text'С помощью jQueryvar text = $('a').contents().first()[0].textContent; $('a').contents().first()[0].textContent = text.replace("Some text", "Other text");пример jsFiddle здесь.
идея
contents()был вдохновлен этой вопрос, на который ответил пользователь charlietfl.
эффективный и надежный способ, который не требует от вас знать, что такое внутренние элементы или что такое текст:
var $a = $('a'); var inner = ''; $a.children.html().each(function() { inner = inner + this.outerHTML; }); $a.html('New text' + inner);
вы можете изменить его .содержание()
$('.yourElement').contents()[0].data = 'New Data';где в вашем случае "[0].данных"
попробуйте этот код
$('a').live('click', function(){ var $img = $(this).find('img'); $(this).text('changed'); $(this).append($img); });
вам нужно будет добавить в
<span>элемент и изменить текст этого элемента, например:<a href="link.html"><span id="foo">Some text</span><img src="image.jpg" /></a>затем, вы можете позвонить в jQuery:
$("#foo").html("Other text");и ваш результат будет эффективно быть:
<a href="link.html"><span id="foo">Other text</span><img src="image.jpg" /></a>
я добавил функцию jQuery для этой потребности.
возможно, Вам потребуется преобразовать html-сущности в текстовое представление, поэтому я добавил
моя общая версия:
let button = $('#yourElement'); button.html(button.html().replace(button[0].innerText, "New Text"));
Стенография для большего количества элементов и ведущего текста для изменения:
elemshtml = ''; $("a *").each(function(){elemshtml +=$(this)[0].outerHTML}); $("a").html('Some text' + elemshtml);
просто используйте некоторые простые функции js:
$('a') [0].возвращение null.nodeValue = "новый текст";
Comments