jquery使用对象作为过滤器

qwe*_*ymk 14 javascript jquery

有没有办法通过对象选择DOM元素?

例如,我希望能够将对象关联到DOM元素,如下所示:

var obj = { a: 1, b:2 };
$('a').click(function() { this.selectThing = obj });
Run Code Online (Sandbox Code Playgroud)

后来......

$.something(obj);
Run Code Online (Sandbox Code Playgroud)

甚至更好:

$('a|selectThing?=', obj);
Run Code Online (Sandbox Code Playgroud)

这样的事情.您可以看到我想要将对象与DOM元素相关联,以便我可以使用该对象获取元素.

我知道这可以用这个filter()方法来完成,我的问题是,如果有一个更优雅的方式不使用filter()这个.

编辑:

为了澄清,我希望能够使用类似选择器的对象,所以我可以做类似于此的事情$(obj)显然不起作用,但你明白了(我希望)

编辑#2:

我希望能够做到这样的事情:

var obj = { prop: 'prop' };
$('a').bindTo(obj);
$.retreive(obj) // should equal $('a')
Run Code Online (Sandbox Code Playgroud)

我不希望它以obj任何方式改变(obj应该仍然{prop: 'prop'}只是).

Rok*_*jan 8

演示

var $div1 = $('.box1');
var $div2 = $('.box2');
var obj = { a: $div1, b: $div2 };


obj.a.css({background:'red'});
Run Code Online (Sandbox Code Playgroud)


或者简短的方法: var obj = { a: $('.box1'), b: $('.box2') };


演示jsBin 2

var obj = $('.box1, .box2'); // store objects
obj.css({background:'red'}); // access collection
Run Code Online (Sandbox Code Playgroud)


ben*_*tan 1

使用三种方法扩展 jQuery:

jQuery.bindObj(data)
jQuery.unbindObj(data)
$.retrieve(data)
Run Code Online (Sandbox Code Playgroud)

你的代码看起来像:

$('a').bindObj({blorg: 'shmorg'});
console.log($.retrieve({blorg: 'shmorg'})); // logs live result of $('a');
Run Code Online (Sandbox Code Playgroud)

完整来源: http: //jsfiddle.net/nUUSV/6/

此解决方案的技巧是将基于 jQuery 构造函数的选择器/标识符存储在一个数组中,并将绑定到这些选择器/标识符的对象存储在另一个数组中,然后使用在$.inArray检索时获取对象的索引并使用该索引来抓取绑定的 jQuery 集合。