Ответ 1
Попробуйте использовать функцию DOM .nextSibling
, чтобы выбрать следующий node (включая текстовые узлы) и использовать nodeValue
для получения текста All the world
$(':checkbox')[0].nextSibling.nodeValue
Использование jQuery. У меня есть следующий html:
<input type="checkbox" name='something' value='v1' /> All the world <br />
Как получить ТОЛЬКО текст. какой селектор мне следует использовать? (Мне нужен "Весь мир" )
Я также не могу коснуться HTML...
Попробуйте использовать функцию DOM .nextSibling
, чтобы выбрать следующий node (включая текстовые узлы) и использовать nodeValue
для получения текста All the world
$(':checkbox')[0].nextSibling.nodeValue
Просто используйте plain-JavaScript nextSibling
, хотя вам нужно "выкинуть" из jQuery, чтобы использовать этот метод (следовательно, [0]
):
var text = $('input:checkbox[name="something"]')[0].nextSibling.nodeValue;
И я наконец понял, что не так с моим другим предложением, которое исправлено:
var text = $('input:checkbox[name="something"]').parent().contents().filter(
function(){
return this.nodeType === 3 && this.nodeValue.trim() !== '';
}).first().text();
И чтобы убедиться, что вы только получаете 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();
Если вы добавили 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();