Use jQuery to wrap text after element

What I have:

A checkbox inside a label.

<label for="foo">
  <input type="checkbox" id="foo" />bar

What I need:

Using jQuery, I need to to wrap the text following the checkbox (i.e. “bar”), in a span element.

<label for="foo">
  <input type="checkbox" id="foo" /><span>bar</span>

What I’ve tried:


This does not exclude the checkbox as required.


If you want to wrap the text node, you could filter the contents of the element based on whether the nodeType property is 3 (which is the value of a text node), and wrap the returned text node.

$('label').contents().filter(function () {
  return this.nodeType === 3;

Alternatively, if you know the text node will always be the next sibling of the input element, you could select the next sibling node using the nextSibling property:

$('label input').each(function () {