2011-06-28 14 views
6

nasıl düzenlenir. jQuery (V.6.1) çekirdekte 'attr' fonksiyonunu değiştirmek için çalışıyorum bir jquery işlevi

ben jquery-6.1.js dosyasında sonra sayfaya dahil oluyor bir plugins.js dosya var. Plugins.js dosyası, bazı SVG işlevlerini barındırmak için çeşitli jQuery çekirdek işlevlerine yapılan geliştirmeler içerir.

bunu değiştirmeden plugins.js dosyasına attr fonksiyonunu kopyaladıktan, ama artık denir bir JavaScript hatası üretir. sadece uzatmak,

(function($){ 

    $.fn.attr = function(elem, name, value, pass){ 

     var nType = elem.nodeType; 

     // don't get/set attributes on text, comment and attribute nodes 
     if (!elem || nType === 3 || nType === 8 || nType === 2) { 
      return undefined; 
     } 

     if (pass && name in jQuery.attrFn) { 
      return jQuery(elem)[ name ](value); 
     } 

     // Fallback to prop when attributes are not supported 
     if (!("getAttribute" in elem)) { 
      return jQuery.prop(elem, name, value); 
     } 

     var ret, hooks, 
      notxml = nType !== 1 || !jQuery.isXMLDoc(elem); 

     // Normalize the name if needed 
     name = notxml && jQuery.attrFix[ name ] || name; 

     hooks = jQuery.attrHooks[ name ]; 

     if (!hooks) { 

      // Use boolHook for boolean attributes 
      if (rboolean.test(name) && 
       (typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase())) { 
       hooks = boolHook; 

      // Use formHook for forms and if the name contains certain characters 
      } else if (formHook && (jQuery.nodeName(elem, "form") || rinvalidChar.test(name))) { 
       hooks = formHook; 
      } 

     } 

     if (value !== undefined) { 

      if (value === null) { 
       jQuery.removeAttr(elem, name); 
       return undefined; 

      } else if (hooks && "set" in hooks && notxml && (ret = hooks.set(elem, value, name)) !== undefined) { 
       return ret; 

      } else { 
       elem.setAttribute(name, "" + value); 
       return value; 
      } 

     } else if (hooks && "get" in hooks && notxml) { 

      return hooks.get(elem, name); 

     } else { 

      ret = elem.getAttribute(name); 

      // Non-existent attributes return null, we normalize to undefined 
      return ret === null ? 
       undefined : 
       ret; 
     } 

    }; 

})(jQuery); 
+2

Ne hata üretir? –

+2

attr üzerinde hangi tür öğeleri kullanıyorsunuz? Jquery 1.6 onlar attr eserler, artık özellikleri ayarlamak için DIV etiketleri gibi bazı html elemanlarında pervane kullanmak ve tablolar nasıl exclusivly değişti: işlenen elem 'in' http://api.jquery.com/prop/ – John

+0

Geçersiz - if (jQuery parçalarını değiştirmek için önce! (elem içinde "getAttribute")) { incidentially, bu tekniği kullandım, sadece yazmayı kabul etmez özn fonksiyonunu (şimdiye kadar) gibi görünüyor. – Steve

cevap

7

yerine tamamen taban attr fonksiyonunu üzerine yazarak: bu özel fonksiyon üzerine yazılır sevmez neden

kimse (muhtemelen yanlış bir şekilde üzerine yazılmasını ediyorum) biliyor mu böyle:

(function($){ 
    var jqAttr = $.fn.attr; 
    $.fn.attr = function(elem, name, value, pass) { 
     // check to see if it's the special case you're looking for 
     if (name === 'transform') { 
      // handle your special SVG case here 
     } else { 
      jqAttr(elem, name, value, pass); 
     } 
    }; 
}(jQuery)); 

bazı özel işlevsellik sağlamak $.each geçersiz kılmak için buna benzer bir şey yaptı. Bu Karşılaştığınız hata çözecektir olmadığından emin değilim, ama bunun yerine bir değişiklik yapmak için tüm yöntemi/kopyalamak yapıştırmak zorunda işlevselliğinde küçük bir özel değişikliğini eklemek için daha iyi bir yoldur. Bu yöntem ayrıca temel jQuery kitaplığının özelleştirmenizi etkilemeden değişmesine de izin verir.

+0

Bunu beğendim. İyi bahşiş için teşekkürler. – Steve

+0

BTW: Bu "maymun yama" olarak adlandırılır. – Axel