我可以使这个jquery选择器更好吗?

时间:2011-12-08 23:29:39

标签: jquery

我正在做一些字符串操作来构建一个jquery选择器。诀窍,但对我来说似乎有点难看。有没有更好的方式做我正在做的事情?

$(".hierarchical[data-dependson='"+id+"']")

编辑:为什么它看起来很难看?如果可以的话,我想避免字符串操作。我使用.eq.has看到了更好看的代码 - 但我看不到在这里使用它们的方法。

4 个答案:

答案 0 :(得分:1)

class以外的属性进行搜索速度很慢,如果您想加快速度,可以让id成为一个类并选择它:

$(".hierarchical."+id)

这是一个jsperf,用于显示两种选择器的速度差异:http://jsperf.com/select-by-attribute-vs-class(扰流警报:按类选择的速度要快几倍)。

答案 1 :(得分:1)

这个怎么样:

$.fn.attrIs = function(attr, value) { 
    return $(this).filter(function(index){
        return $(this).attr(attr) == value;
    });  
}

然后:

$(".hierarchical").attrIs("data-dependson", id);

给定一个jQuery对象集合,这个attrIs(attr,value)函数会将集合减少到只有那些具有attr == value

的元素

以下是一个示例:http://jsfiddle.net/RC652/

您可以修改此方法以更好地适合您自己的目的。

答案 2 :(得分:0)

你真正缺少的是一个很好的javascript格式化方法,所以你试图做的并不是被你的所有引号淹没。

我喜欢引用here的格式方法。这里它被复制为实用函数,因此您不必修补内置字符串对象。

var format = function(target) {
  var args = arguments;
  return target.replace(/{(\d+)}/g, function(match, number) {
    number = parseInt(number) + 1;
    return typeof args[number] != 'undefined'
      ? args[number]
      : match
    ;
  });
};

然后你可以这样做:

var selector = format(".hierarchical[data-dependson='{0}']", id);
// or with the monkey patch
selector = ".hierarchical[data-dependson='{0}']".format(id);
$(selector)

仍然有点混乱,但从根本上说,你将一个值拼接成一个字符串。我也绝不担保任何此类的表现。其他答案可能会说明这很慢,但这不是你的问题。

答案 3 :(得分:0)

你可以过滤它:

$(".hierarchical").filter(function(){
    return $(this).data("dependson") === id;
});