Подтвердить что ты не робот

Как получить текст node после элемента?

Использование jQuery. У меня есть следующий html:

<input type="checkbox" name='something' value='v1' /> All the world <br />

Как получить ТОЛЬКО текст. какой селектор мне следует использовать? (Мне нужен "Весь мир" )

Я также не могу коснуться HTML...

4b9b3361

Ответ 1

Попробуйте использовать функцию DOM .nextSibling, чтобы выбрать следующий node (включая текстовые узлы) и использовать nodeValue для получения текста All the world

$(':checkbox')[0].nextSibling.nodeValue

Ответ 2

Просто используйте plain-JavaScript nextSibling, хотя вам нужно "выкинуть" из jQuery, чтобы использовать этот метод (следовательно, [0]):

var text = $('input:checkbox[name="something"]')[0].nextSibling.nodeValue;

JS Fiddle demo.

И я наконец понял, что не так с моим другим предложением, которое исправлено:

var text = $('input:checkbox[name="something"]').parent().contents().filter(
    function(){
        return this.nodeType === 3 && this.nodeValue.trim() !== '';
    }).first().text();

JS Fiddle demo.

И чтобы убедиться, что вы только получаете textNodes до br (хотя, откровенно говоря, это становится чрезмерно сложным, и первое предложение работает намного легче и, я подозреваю, надежно):

var text = $('input:checkbox[name="something"]').parent().contents().filter(
    function(){
        return this.nodeType === 3 && this.nodeValue.trim() !== '' && $(this).prevAll('br').length === 0;
    }).text();

JS Fiddle demo.

Ответ 3

Если вы добавили label в свою разметку (что рекомендуется), вы можете сделать это следующим образом:

HTML

<input type="checkbox" id="something" name="something" value="v1" /><label for="something">All the world</label> <br />

JS

var text = $( '#something ~ label:first' ).text();