2011-11-16 23 views
9

attr विधि के लिए jQuery documention कहा गया है कि:अंतर()

विशेषता मान ऐसे मूल्य और tabindex के रूप में कुछ विशेषताओं के अपवाद के साथ तार कर रहे हैं।

और उस मामले होने लगते है। निम्नलिखित तत्व पर विचार करें:

<input type="text" id="example" tabindex="3"> 

निम्न पंक्ति वास्तव में शो "संख्या", नहीं "स्ट्रिंग" करता है:

alert(typeof $("#example").attr("tabindex")); //Number 

अब, बात यह है कि मुझे भ्रमित कर रहा है कि डोम विधि getAttribute का उपयोग करते समय, आप एक अलग परिणाम प्राप्त:

alert(typeof $("#example")[0].getAttribute("tabindex")); //String 

attr विधि के लिए jQuery स्रोत को देखते हुए, ऐसा लगता है कि jQuery बस क्या रिटर्न getAttribute रिटर्न, तो कोई अंतर क्यों है? यहाँ

ret = elem.getAttribute(name); 
// Non-existent attributes return null, we normalize to undefined 
return ret === null ? 
     undefined : 
     ret; 

और मुद्दा प्रदर्शित करने के लिए एक fiddle है: यहाँ relevant lines of the jQuery source है। बस मामलों को भ्रमित करने के लिए, मैंने इसे क्रोम 15, फ़ायरफ़ॉक्स 8, आईई 8 और आईई 7 में आजमाया है, और आईई 7 को छोड़कर ऊपर वर्णित सभी व्यवहार करते हैं, जो दोनों के लिए "संख्या" को अलर्ट करता है (जो मैं होने की उम्मीद करता हूं) ।

उत्तर

10

क्योंकि jQuery propHook for tabIndex परिभाषित करता है जो स्पष्टीकरण parseInt's the return type;

return attributeNode && attributeNode.specified ? 
    parseInt(attributeNode.value, 10) : 
    rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href ? 
    0 : 
    undefined; 

यह हुक तो added to the attrHook जिसके कारण व्यवहार attr समारोह (और क्यों यह पहली बार प्रकट होता no attrHook is defined for tabIndex) में मनाया जाता है है।

+0

आह, जो मुझे jQuery स्रोत के बाद थोड़ा आगे और ठीक से देखने के लिए सिखाएगा! धन्यवाद। –

+3

आपको मास्टर शाखा के बजाय, एक निश्चित टैग से लिंक करना चाहिए। अन्यथा भविष्य में रेखा संख्या बदल सकती है। –

+0

@ फ़ेलिक्सक्लिंग: हो गया, धन्यवाद :) – Matt