是否可以创建自定义标识属性?

时间:2011-07-15 14:31:27

标签: jquery html

是否可以创建一个类或id的标识属性,并在具有特殊字符的jQuery选择器中分配它? 例如,我希望“身份”属性被识别为@(或任何其他特殊字符) 与识别为#

的“id”属性相同

有点

<div identity="myDiv"></div>

和Jquery

$("@myDiv").click(...);

谢谢!

6 个答案:

答案 0 :(得分:1)

当然,请使用attribute-equals-selector[docs]

$('[identity="myDiv"]').click(...

请注意,这需要查看页面上的每个元素并检查属性。

如果您按类选择,或者将类添加到一组元素,并按自定义属性缩小它们,您将获得一些性能。

$('.someClass[identity="myDiv"]').click(...

或者,如果所有潜在元素都位于具有ID的容器中,那么肯定会将您的选择范围缩小到该元素的后代。

$('#someId [identity="myDiv"]').click(...

$('#someId').find('[identity="myDiv"]').click(...

修改

如果您愿意,可以在jQuery中定义自定义过滤器:

$.expr[':']['c'] = function( el, b, filter ) {
    return el.getAttribute( 'identity' ) === filter[ 3 ];
};

var result = $(':c(myDiv)');

这只是使用原生getAttribute获取identity属性,并将其与传递的值进行比较。如果需要不同的处理,可以将其添加到过滤器功能中。

同样的规则适用于缩小性能选择范围。

答案 1 :(得分:0)

您可以尝试这样的事情

$("div").find('[identity="myDiv"]').click(function(){ });

答案 2 :(得分:0)

使用data-属性(jsfiddle作为证据):

<div data-identity="myDiv"></div>

并像这样调用它:

jQuery('[data-identity="myDiv"]').click(function(){
    alert('You just clicked me!');
});

不要试图改变原始jQuery选择器库(Sizzle)的工作方式 - 它使用CSS选择器并让它保持原样。此外,如果您不更改选择器库,这已经过优化,并且将在未来的jQuery版本中兼容。

答案 3 :(得分:0)

HTML是Mark-up Language中的一种。在标记语言中,您可以根据需要随意定义自己的属性......但唯一的是,设计人员和Web浏览器之间应该有一个约定,以便了解如何解析特定属性。 /> 因此,您可以自由定义属性并根据需要使用它们......

“patrick dw”所写的内容是正确的,但我认为最好将其写成

$('Div[identity="myDiv"]').click(...);

以确保您正在使用Div,而不是任何其他元素。

答案 4 :(得分:0)

虽然我同意每个人关于[identity=的内容,但另一种选择是撰写custom parameterised selector。完全矫枉过正,但它是一个选项,并且会让你写出像

这样的东西
$('div:myidentity(myDiv)').click(...);

答案 5 :(得分:0)

有多种方法可以选择项目:

div = $("[identity='myDiv']");

但你可以通过在你的情况下扩展表达式“:”来创建一些伪滑块:

$.extend($.expr[':'],{
    identity: function(a,i,m) {
        return $(a).attr('identity') === m[3];
    }
});

myDiv = $(":identity(myDiv)");

比其他方式更简单,你可以使用你想要的选择器。