2015-02-22 10 views
5

Etiketsiz bir yazıyorum. Onu bulmaya çalışıyorum. jQueryEtiketsiz HERHANGİ BİR SAYFA Bul Find

ile

(bu dinamik metindir, bu yüzden ben kaç tane metin barışlar bilmiyorsanız veya nerede olduklarını. Ben sadece bir div içinde olduğunu biliyoruz. Bu etrafta diğer sorular farklıdır) Metni etiketsiz bulmak için bir çözüm bulabilirim, <p> içine sarın Ama bu da bazı boş p etiketleri üretiyor. Yani sorular:
- This.nodeType === 3 metin ve boşlukları bulur gibi görünüyor. Birisi açıklayabilir mi?
- Birisi bunu çözebilir veya etiketsiz metni bulmanın başka bir yolunu gösterebilir mi? 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>

: Orada oynamak ister eğer

keman olarak

(I noteType === 3 bulabiliriz "bir unsuru veya özelliğinde metinsel içerik temsil")

ÇÖZÜM BEKLENEN: Bu yüzden etiketsiz metni bulup ap etiketine yapıştırıyorum. şal ​​ve beyaz boşluk olmamasına

<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

Tamam onları bulmak ve sonra onlarla ne yapabiliriz? – dfsq

+0

Bu basitleştirilmiş durumda, bir s. Ama öyle görünüyor ki boşluklar da – Nrc

cevap

5

Bir çözüm gibi trimi kullanmaktır: Örnekte, bu aradığım budur

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

fiddle

Referanslar

Node.nodeValue

String.prototype.trim()

+0

AFAIK '.trim()' de olsa yeni satırları ve sekmeleri özleyecektir. :) – Shef

+0

Şunları açıklayabilir misiniz:! == "" Bu tam olarak ne yapıyor? – Nrc

+0

Sarmadan beyaz boşlukları olan öğeleri dışlar. Ne demek istediğinizi söyleyin! ==: Eşitsizlik, tür dönüşümü olmayan karşılaştırma: İşlenenler eşit değilse veya farklı türdeyse, true değerini döndürür. –

2

Tüm yeni satır kaldırmak için $.trim() kullanabilirsiniz metin düğümlerin dizeleri başından ve sonundan (bölünemez boşluklar dahil) boşluklar ve sekmeler.

Bu, yalnızca boşluk, sekme veya yeni satır olan metin düğümlerini filtreleyecektir.

fork of your fiddle ve aşağıdaki ilgili parçacık İşte.

$("#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>