ddd-jquery
Version:
de-bowerified, de-amdified, de-gruntified... jQuery.
91 lines • 3.31 kB
JavaScript
var jQuery = require('../core'), rnotwhite = require('../var/rnotwhite'), strundefined = require('../var/strundefined'), access = require('../core/access'), support = require('./support'), __unnameddep__ = require('../selector');
var nodeHook, boolHook, attrHandle = jQuery.expr.attrHandle;
jQuery.fn.extend({
attr: function (name, value) {
return access(this, jQuery.attr, name, value, arguments.length > 1);
},
removeAttr: function (name) {
return this.each(function () {
jQuery.removeAttr(this, name);
});
}
});
jQuery.extend({
attr: function (elem, name, value) {
var hooks, ret, nType = elem.nodeType;
if (!elem || nType === 3 || nType === 8 || nType === 2) {
return;
}
if (typeof elem.getAttribute === strundefined) {
return jQuery.prop(elem, name, value);
}
if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
name = name.toLowerCase();
hooks = jQuery.attrHooks[name] || (jQuery.expr.match.bool.test(name) ? boolHook : nodeHook);
}
if (value !== undefined) {
if (value === null) {
jQuery.removeAttr(elem, name);
} else if (hooks && 'set' in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
return ret;
} else {
elem.setAttribute(name, value + '');
return value;
}
} else if (hooks && 'get' in hooks && (ret = hooks.get(elem, name)) !== null) {
return ret;
} else {
ret = jQuery.find.attr(elem, name);
return ret == null ? undefined : ret;
}
},
removeAttr: function (elem, value) {
var name, propName, i = 0, attrNames = value && value.match(rnotwhite);
if (attrNames && elem.nodeType === 1) {
while (name = attrNames[i++]) {
propName = jQuery.propFix[name] || name;
if (jQuery.expr.match.bool.test(name)) {
elem[propName] = false;
}
elem.removeAttribute(name);
}
}
},
attrHooks: {
type: {
set: function (elem, value) {
if (!support.radioValue && value === 'radio' && jQuery.nodeName(elem, 'input')) {
var val = elem.value;
elem.setAttribute('type', value);
if (val) {
elem.value = val;
}
return value;
}
}
}
}
});
boolHook = {
set: function (elem, value, name) {
if (value === false) {
jQuery.removeAttr(elem, name);
} else {
elem.setAttribute(name, name);
}
return name;
}
};
jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (i, name) {
var getter = attrHandle[name] || jQuery.find.attr;
attrHandle[name] = function (elem, name, isXML) {
var ret, handle;
if (!isXML) {
handle = attrHandle[name];
attrHandle[name] = ret;
ret = getter(elem, name, isXML) != null ? name.toLowerCase() : null;
attrHandle[name] = handle;
}
return ret;
};
});