从jQuery对象派生HTMLElement对象

时间:2010-03-30 17:15:26

标签: javascript jquery dom comparison

我正在进行一系列相当详尽的DOM操作,其中一些元素(特别是表单元素)有一些事件。

我正在动态创建(实际上是从源元素克隆)几个<select>框,并为它们分配一个change()事件。

更改事件执行,并且在事件的上下文中,“this”是HTML元素对象。

此时我需要做的是确定此HTML元素对象的上下文。我已将这些对象存储为各种数组中的jQuery实体,但显然

[HTMLElement Object] != [Object Object]

诀窍在于我无法转换$(this)并进行有效的比较,因为这会创建一个新对象并且指针会有所不同。

所以......我一直在反对这个问题。在过去,我已经能够通过进行innerHTML比较来规避这个问题,但在这种情况下,我比较的对象是100%相同的,只是有很多。因此,我需要一个可靠的比较。

如果我能以某种方式从我的原始jQuery对象派生HTMLElement对象,这将很容易。

思考,其他想法?救命。 :(

3 个答案:

答案 0 :(得分:4)

您不能只使用$(this).data("something")来保存元素上的数据,然后再检查这些值吗? (假设你不能仅仅将这些东西称为“id”值。)

哦,jQuery本身也有一个你可以使用的“guid”元素(小心!)

$(myNewObject).data("identity", $.quid++);

答案 1 :(得分:4)

  

如果我能以某种方式从我的原始jQuery对象派生HTMLElement对象,这将很容易

你不仅仅意味着$("#object")[0]$("#object").get(0)使用'derive'吗?

答案 2 :(得分:0)

如果你维护一个包含你创建/克隆的元素的jQuery对象(我们称之为“jqClonedElements”),你可以将该集合减少为与$().filter(element)匹配“this”的单个元素:

var jqThis = jqClonedElements.filter(this);

在此之后,您可能需要确认找到了您的元素,如下所示:

var elementWasFound = (jqThis.length > 0);

这应该就是它的全部!

-Matt