Ответ 1
Как собирать их в массив вместо двух вызовов $
:
var texts = $('span, b').map(function(){
return this.previousSibling.nodeValue
});
texts[0]; // "Some text followed by "
texts[1]; // " and another text followed by "
Литература:
Рассмотрим следующий html-код:
<p>
Some text followed by <span>a span element</span>
and another text followed by <b>a bold text</b>.
</p>
Как я могу получить текст перед элементами span
и b
с помощью jQuery?
Я пробовал $("span").prev()
и $("b").prev()
, но он работал, потому что текст не является элементом. Я также пробовал $("span").parent()
, но он соответствовал целым абзацем, в то время как я хочу только его часть.
Не могли бы вы посоветовать какое-либо решение? Заранее спасибо: -)
Как собирать их в массив вместо двух вызовов $
:
var texts = $('span, b').map(function(){
return this.previousSibling.nodeValue
});
texts[0]; // "Some text followed by "
texts[1]; // " and another text followed by "
Литература:
Я боюсь, вам нужно будет использовать для этого регулярные выражения. Чтобы получить текст перед элементом span, используйте что-то вроде этого:
var txt = $('span').parent().html();
var regex = /(.*)<span>/;
txt = txt.match(regex)[1];
Измените регулярное выражение так же, как и другие части строки.
var textBefore = $('span')[0].previousSibling.nodeValue;
Я искал решение этого вопроса и был смущен, почему мне нужно было сопоставить массив. Контекст не работал у меня. Я наконец понял, как это записать.
Это самое основное решение. Помещение [0] преобразует элемент в элементNode, что позволяет вам вызвать предыдущий код. Нет необходимости помещать его в массив, используя функцию карты, если это не удобно.
У меня появилось следующее решение:
var c = $("span").context.previousSibling;
alert(c.data);
Но я не уверен, насколько это безопасно при использовании разных браузеров?