У меня есть HTML:
<strong>1)</strong>TEXT THAT I ONLY NEED<p>some par</p><ul>..</ul>
Мне нужен только "ТЕКСТ, КОТОРЫЙ Я ТОЛЬКО НУЖЕН", который не содержит никаких тегов в его HTML, как я могу получить его с помощью jQuery?
У меня есть HTML:
<strong>1)</strong>TEXT THAT I ONLY NEED<p>some par</p><ul>..</ul>
Мне нужен только "ТЕКСТ, КОТОРЫЙ Я ТОЛЬКО НУЖЕН", который не содержит никаких тегов в его HTML, как я могу получить его с помощью jQuery?
Лучший способ - .clone()
ваш объект, .remove()
все его .children()
, затем вернитесь к объекту, используя .end()
и, наконец, получите .text()
.
Этот метод описан в этом сообщении в блоге.
$("strong")
.clone() //clone the element
.children() //select all the children
.remove() //remove all the children
.end() //again go back to selected element
.text(); //get the text of element
Это сложно, потому что текст находится в тексте node, а jQuery не поддерживает текстовые узлы, а только элементы. Также потому, что разные браузеры обрабатывают пустое пространство в HTML-коде по-разному, поэтому вы получаете разные наборы узлов в разных браузерах. Вы не можете просто получить узлы и полагаться на то, что текст node, который вы хотите, находится в одном и том же индексе все время.
Вы можете использовать jQuery для поиска элемента и использовать DOM, чтобы получить все узлы внутри него.
Пример HTML:
<div id="test">
<strong>1)</strong>
TEXT THAT I ONLY NEED
<p>some par</p>
<ul>
<li>asdf</li>
<li>qwerty</li>
</ul>
</div>
Используйте jQuery для поиска div, используйте [0]
, чтобы получить элемент DOM из объекта jQuery и свойство childNodes
, чтобы получить его дочерние элементы:
var nodes = $('#test')[0].childNodes;
Затем вы можете использовать jQuery для прокрутки узлов, чтобы найти node, который является элементом strong
:
var index;
$.each(nodes, function(i,e){
if (e.tagName == 'STRONG') {
index = i;
return false;
}
});
Теперь вы можете использовать DOM для получения текстового значения из следующего node:
var text = nodes[index + 1].nodeValue;
Хорошо, если вы используете jQuery, вы бы сделали
$('.selector').text();
дополнительная информация и примеры здесь
edit: Я просто видел, что вы хотите, чтобы текст не был в каких-либо тегах, - это не возможно прямо (факт состоит в том, что каждый текст внутри html-документа находится внутри некоторых HTML-тегов.)
В этом случае я попытался бы изменить разметку (самый простой способ), поэтому нужный текст находится в тегах html.
Если это невозможно, вы используете вышеупомянутый метод text()
, чтобы получить весь текст из родительского элемента, и после того, как вы должны вычесть фрагменты, которые вам не нужны.
см. http://jsfiddle.net/3SSAR/1/ для примера того, как вычесть строки.
просто не забудьте использовать substr
, а не -
для вычитания строк в javascript
Этот код работает для меня:
var el = $("<div/>");
el.html(text).children().remove();
return el.text();
var name = $($(YourElementOuterHTML)).children().remove().end().text();
пример:-
var name = $($(li).find("a").get(0).outerHTML).children().remove().end().text();
var element = $('#element');
var tags = element.find('*');
tags.remove();
var plainText = element.text().trim();
alert(plainText); // prints TEXT THAT I ONLY NEED
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- html -->
<div id='element'>
<strong>1)</strong>TEXT THAT I ONLY NEED
<p>some par</p>
<ul>..</ul>
</div>
Ваша разметка не самая большая для этого. Если вы завернули текст, который вы хотите, с диапазоном, например:
<span class="gettext">TEXT THAT I NEED</span>
Вы можете использовать $('.gettext').text();
в jQuery.