2015-02-22 4 views
5

मेरे पास टैग के बिना कुछ पाठ है। मैं इसे खोजने की कोशिश करता हूं। jQueryटैग के बिना कोई भी टेक्स्ट खोजें

साथ

(इस dinamic पाठ है, इसलिए मैं नहीं जानता कि कितने पाठ की peaces मेरे पास है या कि वे कहाँ हैं। मैं सिर्फ इतना पता है कि एक div के अंदर हैं। यह चारों ओर अन्य प्रश्न से अलग है) मुझे टैग के बिना पाठ खोजने का कोई समाधान मिल सकता है, इसे <p> में लपेटें लेकिन इससे कुछ खाली पी टैग भी उत्पन्न होते हैं। तो प्रश्न हैं:
- यह .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>

: यदि आप वहाँ खेलना पसंद

बेला में (मैं nodeType === 3 मिल सकता है "एक तत्व या विशेषता में पाठ्य सामग्री का प्रतिनिधित्व करता है")

समाधान अपेक्षित: तो मैं टैग के बिना पाठ ढूंढना चाहता हूं और इसे एपी टैग में लपेटना चाहता हूं। जैसे ट्रिम उपयोग करने के लिए है

<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

उन तत्वों को बहिष्कृत करता है जिनमें रैपिंग से सफेद-रिक्त स्थान हैं। यदि आपका मतलब है कि क्या है! ==: प्रकार रूपांतरण के बिना गैर-समानता तुलना: यदि ऑपरेंड बराबर नहीं हैं या यदि वे अलग-अलग प्रकार के हैं तो सत्य वापस आते हैं। –

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>

संबंधित मुद्दे