Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поиск текста в исходном коде html , исключая другие варианты значений (https://javascript.ru/forum/jquery/55927-poisk-teksta-v-iskhodnom-kode-html-isklyuchaya-drugie-varianty-znachenijj.html)

MappeD 21.05.2015 11:11

Поиск текста в исходном коде html , исключая другие варианты значений
 
:help:
Суть задачи: Найти на странице
Далее часть кода примерной страницы:
<a name="top">100</a>
<a name="top">10</a>
<a name="top">0</a>

Вот эту часть >0< и записать её в node узел.
Пробуем так :

var xpathResult = document.evaluate("(//text()[contains(.,'>0<')])[1]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
var node=xpathResult.singleNodeValue.textContent;
alert(node);


Не получается

Пробуем искать по тексту только 0

var xpathResult = document.evaluate("(//text()[contains(.,'0')])[1]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
var node=xpathResult.singleNodeValue.textContent;
alert(node);


Разумеется т.к. FIRST_ORDERED_NODE_TYPE , а первым у нас идёт по порядку 100
node будет равен 100. А заветный 0 , проигнорирует.

Итак , вопрос!
а) Как найти часть кода страницы? >0</a> и записать в node.
или ежели это не возможно средствами JS.
Как исключить из поиска 100 и 10, которые идут перед заветным нулём.
Скажу сразу пробовал UNORDERED_NODE_ITERATOR_TYPE с методом iterateNext() дабы немного рандомизировать выборку значений - ничего не вышло. Тяжёлые наркотики не :no: употребляю , заранее спасибо за помощь. ;)

devote 21.05.2015 12:18

document.evaluate('//node()[text()="0"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)

MappeD 21.05.2015 12:33

Цитата:

Сообщение от devote (Сообщение 371742)
document.evaluate('//node()[text()="0"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)

Спасибо! Большее человеческое. А как Вы заставили в node воспринимать только значение 0 ? Если не сложно, для чайников :yes:
Что обозначает это //node() ?

devote 21.05.2015 13:07

Цитата:

Сообщение от MappeD
Что обозначает это //node() ?

node() - Возвращает все узлы и текстовые в том числе.

Хотя для вашего случая достаточно использовать * (звездочку) которая возвращает только элементы без текстовых узлов. Что-то вроде:
//*[text()="0"]

Цитата:

Сообщение от MappeD
А как Вы заставили в node воспринимать только значение 0 ?

Для этого используется функция text() которая возвращает текст текущей ноды, далее сравниваем текст с шаблоном (в нашем случае со строкой "0")

MappeD 21.05.2015 14:57

Понял, спасибо ещё раз. :write:


Часовой пояс GMT +3, время: 15:10.