Thursday 15 July 2010

jquery - Check if paragraph only has child elements no text -


  & lt; p id = '1' & gt; & lt; / p & gt; & Lt; p id = '1a' & gt; & lt; br / & gt; & lt; / p & gt; & Lt; p id = '3success' & gt; & lt; b & gt; यह मैच करें & lt; / b & gt; & lt; / p & gt; & Lt; p id = '3fail' & gt; & lt; b & gt; यह मैच करें & lt; / b & gt; लेकिन अब इस परीक्षा के कारण नहीं & lt; / p & gt;   

मेरे पास कुछ तर्क है जो निम्नलिखित तत्वों को पूरा करने वाले तत्वों को छोड़ने की आवश्यकता है

  1. कोई HTML नहीं
  2. केवल br
  3. केवल कुछ प्रकार के बच्चे तत्व हैं (बी, आई, आईएमजी)

    मैं आसानी से 1/2 को संभाल सकता हूं, लेकिन तीसरा मुझे परेशानी हो रही है। मुझे पता है कि बच्चों के हिस्से पर जोर देने के लिए, $ ('# 3fail')। बच्चों ()। लंबाई लेकिन मुझे पता नहीं कैसे पता है कि अतिरिक्त पाठ क्या है।

    कोई भी कैसे मान्य करने के लिए सुझाव 3? मैं एक सरल .each फ़ंक्शन

      $ ('p') में प्रसंस्करण कर रहा हूं। प्रत्येक (फ़ंक्शन () {var element = $ (this) अगर (मैचों कंडीशन (तत्व)) {डोलोगिक (तत्व)}});   

    नोट

    किसी ने एक उत्तर पोस्ट किया है और बहुत सारे अपवाद प्राप्त किए हैं लेकिन यह काम नहीं करता है।

    मैं @ कोलिंक के उत्तर को ठीक करने में सक्षम था

      var getNontextNodes; // coffeescript उत्पन्न getNontextNodes = समारोह (नोड्स) {var सीएनटी, एन, _i, _len; सीएनटी = 0; (_i = 0, _len = nodes.length; _i & lt; _len; _i ++) के लिए {n = नोड्स [_i]; अगर (n.textContent.trim ()) {cnt ++; }} वापसी सीएनटी; }; $ ("पी")। प्रत्येक (फ़ंक्शन () {if ((this.children.length === this.childNodes.length) || (getNontextNodes (this.childNodes) === this.children.length)) $ (यह & quot; बी शैली = 'रंग: हरा' & gt; सफलता & lt; / b & gt; "); और $ (यह) .append (" & lt; b शैली = 'रंग: लाल' & gt; विफल & lt; / B & gt; ");});    

    आप देख सकते हैं कि एक तत्व में केवल तत्व के बच्चों की जांच
    यदि (this.children.length == this.childNodes.length) , क्योंकि बच्चों [] केवल तत्व बच्चों की गणना करता है, जबकि childNodes [] में टेक्स्ट शामिल होता है नोड्स भी।

    एक बार जब आप यह चरण साफ़ कर देते हैं, तो आप बच्चों [] एरे के माध्यम से दोहरा सकते हैं और अपने tagName की जांच कर सकते हैं कि क्या वे ' अपनी सूची में फिर से।

    संपादित करें: मैंने अभी देखा है, यह किसी भी सफेद स्थान की अनुमति नहीं देगा, जैसे कि नई लाइनें, तत्वों के बीच। यदि आप सफेद स्थान की अनुमति देना चाहते हैं, लेकिन वास्तविक टेक्स्ट नहीं, तो इसके बजाय इस चेक की कोशिश करें:
    if (! (This.textcontent || this.innertext)। Match (/ \ s /))

    नहीं, वह काम नहीं करेगा यह, हालांकि होगा:

      var filter = []। फ़िलटर? [] .filter: फ़ंक्शन (सीबी) {के लिए (var i = 0, l = this.length, ret = []; i & lt; l; i ++) {यदि (सीबी (यह [i])) ret.push (यह [I]);} वापसी रिटर्न;}; $ ("पी")। प्रत्येक (कार्य () (यदि (this.children.length == this.childNodes.length || filter.call (this.childNodes, फ़ंक्शन (n) {return n.nodeType == 3 & amp; ; & Amp; n.nodeValue.match (/ \ S /);})। लंबाई == 0) $ (यह) .append ("& lt; b शैली = 'रंग: हरे' & gt; सफलता & lt; / b & gt;") Else $ (this) .append ("& lt; b शैली = 'रंग: लाल' & gt; विफल & lt; / b & gt;")});   



No comments:

Post a Comment