代码之家  ›  专栏  ›  技术社区  ›  M. Ryan

从jquery对象派生htmlelement对象

  •  5
  • M. Ryan  · 技术社区  · 16 年前

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

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

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

    不过,我现在需要做的是确定这个HTML元素对象的上下文。我已经将这些对象存储为组合数组中的jquery实体,但显然

    [HTMLElement Object] != [Object Object]

    诀窍是我不能强制转换$(this)并进行有效的比较,因为这样会创建一个新对象,指针也会不同。

    所以…我用头撞这个有一段时间了。在过去,我可以通过进行innerhtml比较来绕过这个问题,但是在这种情况下,我比较的对象是100%相同的,只是有很多相同的对象。因此,我需要一个可靠的比较。

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

    想法,其他想法?帮助。:(

    3 回复  |  直到 11 年前
        1
  •  4
  •   Pointy    16 年前

    你不能用一下吗 $(this).data("something") 要在元素上保留数据,然后稍后检查值吗?(假设您不能简单地给出这些值ol'“id”。)

    哦,jquery本身也有一个“guid”元素,您可以使用它(小心!)

    $(myNewObject).data("identity", $.quid++);
    
        2
  •  4
  •   Tim Cooper    14 年前

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

    你不是说 $("#object")[0] $("#object").get(0) 用“派生”来表示,是吗?

        3
  •  0
  •   MattE_WI    11 年前

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

    var jqThis = jqClonedElements.filter(this);
    

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

    var elementWasFound = (jqThis.length > 0);
    

    就这些了!

    -马特