2015-02-22 3 views
5

У меня есть текст без тегов. Я пытаюсь его найти. С JQueryНайти любой текст без тегов

(это динамичнее текст, так что я не знаю, сколько Миров текста у меня есть или где они. Я просто знаю, что находятся внутри дел. Это отличается от других вопросов вокруг)

Я мог найти решение для поиска текста без тэгов, обернуть его в <p> Но это также порождает некоторые пустые теги. Так что вопросы:
- This.nodeType === 3 кажется, что находит текст и пробелы. Может кто-нибудь объяснить?
- Может кто-нибудь решить эту проблему или показать другой способ найти только текст без тегов?

(я мог бы найти NODETYPE === 3 "Представляет текстовое содержание в качестве элемента или атрибута")

В скрипку, если вы хотите играть там: http://jsfiddle.net/bhpaf8hu/

$("#tot").click(function() { 
 
\t \t \t \t 
 
\t $("div").contents().filter(function() { 
 
\t \t return this.nodeType === 3; 
 
\t }).wrap("<p>"); 
 
\t 
 
});
p { background:green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="tot"> 
 
    <h1> This is a h1</h1> 
 
    Text without p 
 
    <br> 
 
    Another text without p 
 
    <br> 
 
    <p>This text has p</p> 
 
</div>

РЕШЕНИЕ ОЖИДАЕТСЯ: Поэтому я хотел бы найти текст без тегов и обернуть его в тег ap. В примере, это то, что я ищу:

<div id="tot"> 
    <h1> This is a h1</h1> 
    <p>Text without p</p> 
    <br> 
    <p>Another text without p</p> 
    <br> 
    <p>This text has p</p> 
</div> 
+1

Хорошо вы можете найти их, а затем делать то, что с ними? – dfsq

+0

В этом упрощенном случае я обернута на стр. Но кажется, что он тоже находит пробелы – Nrc

ответ

5

Одно решение, чтобы избежать обертывание и белых пространств использовать накладку как:

$("#tot") 
    .contents() 
    .filter(function() { 
    // get only the text nodes 
    return this.nodeType === 3 && this.nodeValue.trim() !== ""; 
}).wrap("<p />"); 

fiddle

Ссылки

Node.nodeValue

String.prototype.trim()

+0

AFAIK '.trim()' будет пропускать новые строки и вкладки. :) – Shef

+0

Можете ли вы объяснить:! == "" Что это делает? – Nrc

+0

Исключает элементы, которые имеют белые пробелы от упаковки. Если вы имеете в виду, что есть! ==: Сравнение без равенства без преобразования типов: возвращает true, если операнды не равны или имеют разные типы. –

2

Вы можете использовать $.trim(), чтобы удалить все переводы строк, пробелы (включая неразрывные пробелы) и вкладки с начала и конца строки текстовые узлы.

Это будет отфильтровывать те текстовые узлы, которые являются только пробелами, вкладками или символами новой строки.

Вот fork of your fiddle и соответствующий фрагмент ниже.

$("#tot").click(function() { 
 
\t \t \t \t 
 
\t $("div").contents().filter(function() {  
 
\t \t return  this.nodeType === 3 
 
       && $.trim($(this).text()) != ''; 
 
\t }).wrap("<p>"); 
 
\t 
 
});
p { background:green; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="tot"> 
 
    <h1> This is a h1</h1> 
 
    Text without p 
 
    <br> 
 
    Another text without p 
 
    <br> 
 
    <p>This text has p</p> 
 
</div>

Смежные вопросы