安全地解包jQuery实例以获取包装的DOM元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全地解包jQuery实例以获取包装的DOM元素相关的知识,希望对你有一定的参考价值。

使用jQuery包装两次html元素是一种安全的操作,因为它返回相同DOM元素的实例:

var $a = $('#foo');
var $b = $($a);
alert($b.get(0) === $a.get(0)); // true

它允许灵活设置配置对象,可以包含选择器,DOM元素或jQuery实例。

我不知道,所以在我的个人库中,我使用方法扩展jQuery以安全地包装和解包对象。

在jQuery核心中是否存在从其相对jQuery实例中解包DOM元素的安全向后操作?

我的意思是这样的事情:

function unwrap(obj) {
    return (obj instanceof jQuery) ? obj.get(0) : obj;
}

这足够聪明,每次都可以避免有条件的检查。

答案

Detect DOM object vs. jQuery Object似乎包含了这个问题的答案。

每个jQuery对象都有一个jquery属性。就像是:

function unwrap(obj) {
    return (obj.jquery) ? obj.get(0) : obj;
}
另一答案

将所有内容包装在jQuery中然后从结果数组中获取第0个元素会更有意义:

jQuery( elem )[0];

如果传递了jQuery对象,jQuery( jQueryObject )将以相同的顺序返回相同的元素。如果传递元素,则返回元素。如果传递一个jQuery对象,这将返回其中的第一个元素。如果传递选择器,则返回DOM中的第一个匹配项。

我们在jQuery UI中使用类似的技术来基本上解析您在选项中传递给widget的任何selector / element / jquery对象。

以上是关于安全地解包jQuery实例以获取包装的DOM元素的主要内容,如果未能解决你的问题,请参考以下文章

前端基础JQuery

jQuery:获取 .timeago() 以处理 DOM 就绪后加载的元素(Ajax)

将 jQuery 选择器转换为 HTML 以获取新的 DOM 元素

jQuery循环使用相同类的元素

jquery16 DOM操作 : 添加 删除 获取 包装 DOM筛选

jquery17 DOM操作 : 添加 删除 获取 包装 DOM筛选