Próbuję zmodyfikować funkcję 'attr' w rdzeniu jQuery (V.6.1).Jak edytować funkcję jquery
Mam plik plugins.js, który jest dołączony do strony za plikiem jquery-6.1.js. Plik plugins.js zawiera poprawki wprowadzone do różnych podstawowych funkcji jQuery w celu dostosowania niektórych funkcji SVG.
Skopiowałem funkcję attr do pliku plugins.js bez jej modyfikacji, ale teraz wywołuje błąd JavaScript po jej wywołaniu.
Czy ktoś wie dlaczego ta konkretna funkcja nie lubią być nadpisane (ja prawdopodobnie zastąpieniem go w niewłaściwy sposób):
(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);
Jaki błąd powstaje? –
jakiego rodzaju elementów używasz? w jquery 1.6 zmienili się wyłącznie, jak działa attr, teraz używasz propu na niektórych elementach html, takich jak znaczniki DIV, i tabele do ustawiania właściwości: http://api.jquery.com/prop/ – John
Niepoprawny argument "w" argument - if (! ("getAttribute" w elem)) { Nawiasem mówiąc, użyłem tej techniki przed modyfikacją części jQuery, po prostu wydaje się być funkcją attr (do tej pory), która nie akceptuje nadpisywania. – Steve