【问题标题】:Deriving an HTMLElement Object from jQuery Object从 jQuery 对象派生 HTMLElement 对象
【发布时间】:2010-03-30 17:15:25
【问题描述】:

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

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

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

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

[HTMLElement Object] != [Object Object]

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

所以...我已经为此苦苦思索了一段时间。在过去,我已经能够通过进行 innerHTML 比较来规避这个问题,但在这种情况下,我正在比较的对象是 100% 相同的,只是它们有很多。因此,我需要一个可靠的比较。

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

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

【问题讨论】:

    标签: javascript jquery dom comparison


    【解决方案1】:

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

    你不只是指 $("#object")[0]$("#object").get(0) '派生'对吗?

    【讨论】:

    • 没有。按 ID 选择也不是一种选择。
    • 他的意思是你的 jQuery 对象已经加载了一个选择器,$()[0] 会给你使用给定选择器找到的元素。示例:$(this)[0] == this 返回 true,而 $(this) == this 返回 false。
    • 确实,$("#object")[0] 返回原生 HTML DOM 元素。
    【解决方案2】:

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

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

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

    【讨论】:

    • 太棒了。我不知道存在......实际存储的价值在哪里? ID 的处理是他们在这个开发阶段已经有 ID,由于一些向后兼容性问题,我还没有准备好删除。
    • 暂时接受这个,但我总是对更多想法持开放态度。但是 data() 似乎可以解决问题。
    • 如果对象有“id”值,为什么不直接使用呢?请注意,您需要确保所有“id”值都是唯一的,否则就会开始发生奇怪和神秘(通常是坏事)的事情。
    • 因为很遗憾,页面上有重复的 ID。是的,我知道。别看我,我被录用的时候它就在那儿。也改不了。 #arcanebusinessrules
    • 好吧,如果有重复的“id”值,所有的赌注都会被取消。各种各样的非常奇怪的事情最终可能会发生在您的页面上,直到您修复您处于暮光区。
    【解决方案3】:

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

    var jqThis = jqClonedElements.filter(this);
    

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

    var elementWasFound = (jqThis.length > 0);
    

    应该就是这些了!

    -马特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多