Javascript 如何选择特殊属性(前缀:name=";)?
如何使用jQuery选择特殊属性,如“user:name”或“city:id”Javascript 如何选择特殊属性(前缀:name=";)?,javascript,jquery,attributes,Javascript,Jquery,Attributes,如何使用jQuery选择特殊属性,如“user:name”或“city:id” <div user:name="Ropstah"></div> <span city:id="4"></div> 如果您同意使用非标准属性(这不会以任何方式影响标记的呈现..这是非常无害的,真的),您可以这样做: <div nonstandard="harmless" /> $("div[nonstandard='harmless']") $(“di
<div user:name="Ropstah"></div>
<span city:id="4"></div>
如果您同意使用非标准属性(这不会以任何方式影响标记的呈现..这是非常无害的,真的),您可以这样做:
<div nonstandard="harmless" />
$("div[nonstandard='harmless']")
$(“div[非标准=”无害“]))
我已经使用过这种方法好几次了。务实是没有坏处的。
您有两个选择:
- 摆脱
和使用“非标准”属性(老实说,这没什么大不了的):
- 获取更多详细信息,或者使用插件获取功能:
$('div').filter(function() {
return $(this).attr('user:name') !== undefined;
}).whateverElse();
在速度方面,这应该非常接近jQuery的[]
选择器,因为它在库中的作用就是这样。当然,每次你想找到一个有属性的元素时,都需要输入更多的内容,因此你可以为它编写一个插件,因为jQuery非常棒,可以让你做这样的事情:
$.fn.hasattr = function(attr) {
return this.filter(function() {
return $(this).attr(attr) !== undefined;
});
};
这样,您就可以执行更简单的操作:
$('div').hasattr('user:name').whateverElse();
或者,如果要检查属性是否等于某个值,插件可能是:
$.fn.cmpattr = function(attr, value) {
return this.filter(function() {
return $(this).attr(attr) == value;
});
};
然后你可以做:
$('div').cmpattr('user:name', 'Ropstah').whateverElse();
修复它:
jQuery.expr.match.ATTR = /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+|\w+:\w+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/;
// ^^^^^^^^
编辑:这不是一个正式的修复程序,但它似乎工作得很好
由于jQuery及其内部工作,我遇到了不少麻烦。。。有时,我认为,自己陷在那里修好也没关系 啊。您自己测试过:)然后回到我的第一个建议:更改您的标记。自定义属性的W3C标准是什么?我如何使用jQuery选择这些?我可以很容易地更改标记……如果他使用的是XHTML充当应用程序/XHTML+xml,那么就不需要了。在这种情况下,定义额外的xml名称空间来存放元素和属性是完全可以接受的。@ropstah:我有时使用非标准属性。去掉冒号,基本上就可以了:&$(“div[nonstandard=''”)@NickFitz:你说得对。但即使使用正确的DTD,我猜jQuery仍然会失败。我同意。“非标准”属性的东西有时是一条路要走。有些人可能不同意违反标准。。但这通常是那些认为做一名程序员就是坚持规范而不是解决问题的人:)很好。起初,我不确定直接编辑正则表达式是否是一个热门主意,但见鬼,为什么不呢。这是一个正式的解决方案吗?这已经通过测试套件了吗?很确定他刚刚搞定了。
jQuery.expr.match.ATTR = /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+|\w+:\w+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/;
// ^^^^^^^^