Как получить текстовый узел после элемента?

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

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

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

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

 Bugs22 окт. 2012 г., 20:59

Ответы на вопрос(4)

Решение Вопроса

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

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

Просто используйте обычный JavaScriptnextSiblingхотя вы должны отказаться от 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.

 Kevin Boucher22 окт. 2012 г., 21:10
Удалено голосование
 I Hate Lazy22 окт. 2012 г., 21:08
Несмотря на то, что OP запрашивает узел, кажется, что текст на самом деле нужен. Просто добавь.data или же.nodeValue к концу.
 Kevin Boucher22 окт. 2012 г., 21:06
Это не дает текст.
 David Thomas22 окт. 2012 г., 21:05
Я не; Я не мог найти способ, который работает надежно.
 Selvakumar Arumugam22 окт. 2012 г., 21:03
Если вы собираетесь использоватьfilter Вы можете очень хорошо использовать.text() на текстовых узлах .. не нужно[0].nodeValue... просто у того, что у jQuery нет способа выбрать текстовый узел.

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();
 Itay Moav -Malimovka22 окт. 2012 г., 21:23
Не могу использовать метку, я не могу коснуться HTML
 I Hate Lazy22 окт. 2012 г., 21:03
+1 при условии, что это ярлык(скорее всего), но вместо этого я бы использовал правильный селектор API селекторов, чтобыquerySelectorAll могут быть использованы.$('#something + label')
 Kevin Boucher22 окт. 2012 г., 21:05
Что не так со следующим селектором братьев и сестер?api.jquery.com/next-siblings-selector
 I Hate Lazy22 окт. 2012 г., 21:06
Ничего, кроме:first является проприетарным селектором Sizzle, поэтому по умолчанию используется движок селектора Sizzle на основе JavaScript, а не собственный браузер.
 Kevin B22 окт. 2012 г., 21:10
@KevinBoucher Правильно, но дело в том, что это не CSS-селектор, поэтому querySelectorAll не может быть использован, то есть строка должна быть проанализирована.

заверните текст в метку

$('input[type="checkbox"]')
  .each(function(index, el) {
    var textNode = $(el.nextSibling);
    if (textNode[0].nodeType == Node.TEXT_NODE) {
      let checkwrap = $(el).wrap('<label class="found"></label>').closest('.found');
      textNode.appendTo(checkwrap);
    }
  });
.found {
  border: solid cyan 1px;
  color: blue;
  padding: 0.5em;
  display: inline-block;
  margin: 0.3em;
}

label.found {
  color: lime;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<span>in a span</span>
<input type="checkbox" name='something' value='v1' /> All the world <br />
<input type="checkbox" name='something2' value='v2' /> All the world 2 <span>in a span</span><br />
<input type="checkbox" name='something3' value='v3' /> All the world 3 <span>in a span</span>
<input type="checkbox" name='something4' value='v4' /> All the world 4<span>in a span also</span>

там, завернутый в этикетку, о, подождите, это ответ, просто нужно получитьnextSibling изолированы по типу

Ваш ответ на вопрос