2012-01-04 6 views
7
<div id="myDiv" class=" blueberry mango "></div> 

अगर हम का उपयोग .addClass()क्या कोई विशेष कारण है कि jQuery का addClass() सही-ट्रिमिंग नहीं है?

$("#myDiv").addClass("carrot"); 

myDiv के लिए वर्ग अब "(no-space)blueberry mango(double-space)carrot"

है वहाँ एक left-trim है, लेकिन क्योंकि वहाँ और कोई right-trim

आम और गाजर के बीच डबल स्थान नहीं
  • क्या कोई विशेष कारण है कि jQuery का addClass() सही-ट्रिमिंग नहीं है?
  • या बाएं-ट्रिम का इरादा भी नहीं था?
+1

मेरा अनुमान है कि यह गति के साथ क्या करना है। क्या यह एक त्रुटि पैदा कर रहा है? – sissonb

+3

इससे कोई त्रुटि नहीं होनी चाहिए, तो क्या इससे वाकई कोई फर्क पड़ता है? –

+0

फिर भी यह एक दिलचस्प सवाल है। – PeeHaa

उत्तर

7

ऐसा लगता है कि jQuery जोड़ने के बाद jQuery ट्रिम कर रहा है। नीचे दिए गए jQuery addclass कोड देखें

addClass: function(value) { 
    var classNames, i, l, elem, 
     setClass, c, cl; 

    if (jQuery.isFunction(value)) { 
     return this.each(function(j) { 
      jQuery(this).addClass(value.call(this, j, this.className)); 
     }); 
    } 

    if (value && typeof value === "string") { 
     classNames = value.split(rspace); 

     for (i = 0, l = this.length; i < l; i++) { 
      elem = this[ i ]; 

      if (elem.nodeType === 1) { 
       if (!elem.className && classNames.length === 1) { 
        elem.className = value; 

       } else { 
       //HERE IS APPENDS ALL CLASS IT NEEDS TO ADD 
        setClass = " " + elem.className + " "; 

        for (c = 0, cl = classNames.length; c < cl; c++) { 
         if (!~setClass.indexOf(" " + classNames[ c ] + " ")) { 
          setClass += classNames[ c ] + " "; 
         } 
        } 
        elem.className = jQuery.trim(setClass); 
       } 
      } 
     } 
    } 

    return this; 
} 

तो यह नीचे की तरह है,

jQuery.trim(" blueberry mango " + " " + "carrot")

2

ऐसा इसलिए हो रहा है क्योंकि jQuery कक्षाओं की सूची में कक्षा को जोड़ रहा है और फिर पूरे स्ट्रिंग पर trim चला रहा है।

क्या चल रहा है यह देखने के लिए source for addClass पर एक नज़र डालें।

0

स्रोत को देखते हुए, मैं वहाँ उस के लिए कोई कारण नहीं है अनुमान लगा रहा हूँ:

setClass = " " + elem.className + " "; 

for (c = 0, cl = classNames.length; c < cl; c++) { 
    if (!~setClass.indexOf(" " + classNames[ c ] + " ")) { 
     setClass += classNames[ c ] + " "; 
    } 
} 
elem.className = jQuery.trim(setClass); 

यह सच है , प्रत्येक वर्ग के पहले और बाद में एक सफेद स्थान होने से यह पता लगाने में मदद मिलती है कि क्या नया वर्ग (जोड़ा जा रहा है) पहले से ही है या नहीं, लेकिन फिर भी वे पहले पंक्ति को प्रतिस्थापित कर सकते हैं:

setClass = " " + jQuery.trim(elem.className) + " "; 

और यह अभी भी उसी तरह काम करेगा ...

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