У меня есть структура DOM:
<div id="a">
AA
<span>BB</span>
</div>
Я хочу изменить текст в div, но не в промежутке, а именно изменить AA, но сохранить BB, однако, когда я пытаюсь $ ('# a'). Text(), я получаю AABB. Каков правильный способ выбора текста только на уровне div?
Проверьте, это правильно.
var child = $('#a span');
var value = "new value";
$('#a').text(value + child.html());
Лучший способ сделать это - пересечь дочерние узлы #a
и проверить, являются ли они текстовыми узлами. Для каждого текстового узла вам необходимо скопировать внутренний текст и вернуть его:
В качестве общей функции:
function getText($el, separator) {
var s = separator || '',
children = $el.childNodes,
l = children.length,
text = [],
child;
for(; child = children[--l];)
if (child.nodeType === 3)
text.unshift(child.nodeValue);
return text.join(s);
}
Как плагин jQuery
$.fn.getText = function(separator) {
var s = separator || '',
children = this.get(0).childNodes,
l = children.length,
text = [],
child;
for(; child = children[--l];)
if (child.nodeType === 3)
text.unshift(child.nodeValue);
return text.join(s);
}
Я создал пример из этой ссылки: Как выбрать собственный текст для элемента с помощью jQuery
Надеюсь, это поможет вам.
HTML
<div id="a">
AA
<span>BB</span>
</div>
JAVASCRIPT
$.fn.ownText = function() {
return this.eq(0).contents().filter(function() {
return this.nodeType === 3 // && $.trim(this.nodeValue).length;
}).map(function() {
return this.nodeValue;
}).get().join('');
}
var text = $('#a').ownText();
var newText = "CC";
$("#a").html(function(i,t){
return t.replace(text.trim(), newText)
});