jQuery итерация - метод contents()
Пример
Найти все текстовые узлы в абзацах и обернуть их жирным тегом.
$("p").contents().filter(function(){ return this.nodeType != 1; }).wrap("<b/>");
Определение и использование
Метод contents() получает подузлы каждого элемента из набора соответствующих элементов, включая текстовые и комментарии.
Синтаксис
.contents()
Подробное описание
Если задан jQuery объект, представляющий набор элементов DOM, метод .contents() позволяет нам получить прямые потомки этих элементов в дереве DOM и создать новый jQuery объект, используя соответствующие элементы. Метод .contents() и .children() Методы аналогичны, но в первом случае результат jQuery объекта включает текстовые узлы и HTML элементы.
Метод .contents() также можно использовать для получения содержимого документа iframe, при условии, что этот iframe находится в одной домене с главной страницей.
Подумайте о следующем <div>, который содержит несколько текстовых узлов, разделенных двумя символами分行ки (<br>):
<div class="container"> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. <br /><br /> Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <br /> <br /> Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. </div>
Мы можем использовать метод .contents(), чтобы преобразовать блок текста в хорошо структурированные абзацы:
$('.container').contents().filter(function() { return this.nodeType == 3; ) .wrap('<p></p>') .end() .filter('br') .remove();
Этот код сначала принимает содержимое <div class="container">, затем фильтрует его текстовые узлы и封装 их в теги абзацев. Это реализуется через тестирование свойств .nodeType элементов; это свойство содержит числовой код, указывающий на тип узла; текстовые узлы используют код 3. Содержимое будет фильтроваться снова, на этот раз для элементов <br />, которые будут удалены.