Я пытаюсь выяснить о JQuery переименовывать «яблоко» с «оранжевым:»JQuery: Как заменить текст ПОСЛЕ Вложенного тега?
<a id="alvin" href="http://www.camille.com"><ins class="xxx">Anna</ins>apple</a>
Можно ли это сделать легко?
Я пытаюсь выяснить о JQuery переименовывать «яблоко» с «оранжевым:»JQuery: Как заменить текст ПОСЛЕ Вложенного тега?
<a id="alvin" href="http://www.camille.com"><ins class="xxx">Anna</ins>apple</a>
Можно ли это сделать легко?
Я удалил #
из ID, так как он не является допустимым символом идентификатора.
Учитывая, что, попробуйте следующее:
Живой пример:http://jsfiddle.net/u49wy/
var $contents = $('#alvin').contents();
$contents[$contents.length - 1].nodeValue = 'orange';
.contents()
возвращает все дочерние узлы элемента, в том числе текстовые узлы.
Код затем захватывает последний элемент (который является текстовым узлом) и обновляет его nodeValue
, то есть как вы обновляете значение текстового узла.
.contents()
- http://api.jquery.com/contentsпатрик опередил меня, но мое решение немного более динамичным в том, что он будет выбрать текст в любом месте, даже если были метки с обеих сторон:
$('#alvin').contents().filter(function() {
return this.nodeType == 3;
})[0].nodeValue = "orange";
Он делает это путем фильтрации содержимого, так что остаются только текстовые узлы, а первый nodeValue
изменяет на «оранжевый».
Спасибо! Хотел бы я наградить несколькими решениями, такими как E * -E * .com. –
id="#alvin"
не действует синтаксис, '#' используется как часть селектора для JQuery или в CSS.
Для этого очень ограниченного примера замените «яблоко» на «оранжевый», я бы просто прочитал innerHTML
и переписал его. Я даже не использую jQuery для этого.
window.onload = function() {
var alvin = document.getElementById('alvin')
alvin.innerHTML = alvin.innerHTML.replace('apple', 'orange');
}
Я не использовал jQuery, потому что у jQuery нет чистого способа выбора шальных текстовых узлов. Итак, что, если мы обернули любые дочерние текстовые узлы в промежутках? Мы могли бы сделать это:
$('#alvin').contents().filter(function() {
return this.nodeType == 3;
}).wrap('<span></span>').end();
Таким образом, мы остались со структурой:
<a id="alvin" href="http://www.camille.com"><ins class="xxx">Anna</ins><span>apple</span></a>
Тогда мы можем использовать прилегающую селектор +
, чтобы получить на него, как это - ins+span
означает <span>
после <ins>
:
var elem = $('#alvin ins+span');
elem.text(elem.text().replace('apple', 'orange'));
Не много jQuery там ...;) –
Да, я тоже был не очень доволен своим ответом. Я добавил второй подход. – artlung
Я исправил синтаксис; благодаря! –
Другой способ (не очень красиво, хотя):
$("#alvin").html($("#alvin").html().replace(/apple$/,'orange'));
Редактировать: Добавлено $ в конце яблока. Спасибо, Патрик.
Фактически это не будет работать с закрывающим тегом 'a', поскольку он не является частью содержимого' # alvin'. Метод '.html()' возвращает только внутренний HTML-контент. Не какая-либо часть набора тегов, соответствующая селектору. Тем не менее, вы можете использовать конец индикатора ввода '$'. :) – user113716
+1, вы избили меня, хотя я все еще разместил свое решение, потому что оно немного отличается :-) –
@ Andy - Спасибо за +. Да, мой работает с предположением о конкретном позиционировании. Это будет подбрасывать в зависимости от конкретных потребностей OP. – user113716
Спасибо! Я знал, что это можно сделать. Хотелось бы, чтобы я мог присудить множество решений, таких как E * -E * .com (тоже Энди). –