Если у меня есть HTML, как это:
<li id="listItem">
This is some text
<span id="firstSpan">First span text</span>
<span id="secondSpan">Second span text</span>
</li>
Я пытаюсь использовать .text ()
, чтобы получить только строку «Это какой-то текст», но если бы я был сказать $ ('# list-item'). text ()
, я получаю «Это некоторый текст textFirst span textSecond span text».
Есть ли способ получить (и, возможно, удалить, через что-то вроде .text ("")
) только свободный текст внутри тега, а не текст внутри его дочерних тегов?
HTML не был написан мной, так что это то, что я должен работать с. Я знаю, что было бы просто обернуть текст в теги при написании html, но опять же, html предварительно написан.
Это должно быть что-то, приспособленное к потребностям, которые зависят от структуры, которую вы представили. Для примера, который вы привели, подойдет следующее:
$(document).ready(function(){
var $tmp = $('#listItem').children().remove();
$('#listItem').text('').append($tmp);
});
Демо: http://jquery.nodnod.net/cases/2385/run
Но это зависит от того, что разметка будет похожа на ту, что вы разместили.
Мне кажется, что это случай чрезмерного использования jquery. Следующее будет захватить текст, игнорируя другие узлы:
document.getElementById("listItem").childNodes[0];
Вам нужно будет обрезать его, но он даст вам то, что вы хотите, в одной простой строке.
РЕДАКТИРОВАТЬ
Вышеупомянутое приведет к текстовому узлу . Чтобы получить фактический текст, используйте это:
document.getElementById("listItem").childNodes[0].nodeValue;
Это не проверено, но я думаю, вы можете попробовать что-то вроде этого:
$('#listItem').not('span').text();
просто поместите его в
или
и возьмите этот $ ('# listItem font'). Text ()
Первое, что пришло в голову
<li id="listItem">
<font>This is some text</font>
<span id="firstSpan">First span text</span>
<span id="secondSpan">Second span text</span>
</li>