Aquí hay una implementación de un selector personalizado que funciona para mí.
// Custom jQuery selector to select on custom namespaced attributes
$.expr[':'].nsAttr = function(obj, index, meta, stack) {
// if the parameter isn't a string, the selector is invalid,
// so always return false.
if (typeof meta[3] != 'string')
return false;
// if the parameter doesn't have an '=' character in it,
// assume it is an attribute name with no value,
// and match all elements that have only that attribute name.
if (meta[3].indexOf('=') == -1)
{
var val = $(obj).attr(meta[3]);
return (typeof val !== 'undefined' && val !== false);
}
// if the parameter does contain an '=' character,
// we should only match elements that have an attribute
// with a matching name and value.
else
{
// split the parameter into name/value pairs
var arr = meta[3].split('=', 2);
var attrName = arr[0];
var attrValue = arr[1];
// if the current object has an attribute matching the specified
// name & value, include it in our selection.
return ($(obj).attr(attrName) == attrValue);
}
};
Ejemplo de uso:
// Show all divs where the custom attribute matches both name and value.
$('div:nsAttr(MyNameSpace:customAttr=someValue)').show();
// Show all divs that have the custom attribute, regardless of its value.
$('div:nsAttr(MyNameSpace:customAttr)').show();
actualización, la respuesta de Suphi es una sintaxis y las obras mucho más simple. Aunque no he hecho comparaciones de rendimiento. –
¿Se supone que la declaración de prefijo de espacio de nombres es xmlns: custom =? – grantwparks