【问题标题】:JQuery methods and DOM propertiesJQuery 方法和 DOM 属性
【发布时间】:2009-02-17 16:04:03
【问题描述】:

我对何时可以使用 DOM 属性以及何时可以在 Jquery 对象上使用 Jquery 方法感到困惑。说,我使用选择器

var $elemSel = $('#myDiv').find('[id *= \'select\']')

此时,$elemSel 是一个 jquery 对象,我理解它是 DOM 元素数组的包装器。我可以通过遍历 $elemSel 对象/数组来获得对 DOM 元素的引用(正确吗?)

我的问题: 1. 有没有办法将此$elemSel 转换为非JQuery 常规DOM 元素数组? 2. 可以同时结合DOM属性和JQuery方法吗(像这样)

$elemSel.children('td').nodeName

(nodeName 是 DOM 相关的,children 是 JQuery 相关的)

编辑:这有什么问题?

$elemSel.get(0).is(':checked')

编辑 2:

感谢您的回复。我现在明白我可以使用 get(0) 来获取 DOM 元素。其他问题:

  1. 如何将 DOM 元素转换为 JQuery 对象?

  2. 如果我将“this”分配给一个变量,那是新的 var DOM 还是 JQuery?如果是 JQuery,如何将其转换为 DOM 元素? (因为我不能使用 get(0))

    var $elemTd = $(this);

  3. 当我执行上述分配时,我看到一些代码示例不包含变量名称的 $ 符号。为什么?

  4. 至于我最初的问题,我可以在一个 JQuery 对象上同时结合 DOM 属性和 JQuery 函数吗?

    $elemSel.children('td').nodeName

【问题讨论】:

    标签: javascript jquery dom


    【解决方案1】:

    您需要 .get(0) 结果来获取 DOM 就绪对象。

    var myBox = $("div#myBox");
    alert(myBox.get(0).id); // "myBox"
    

    阅读 Cody Lindley 的“Peeling Away the jQuery Wrapper and Finding an Array


    回复:编辑: .is() 不是原生 javascript 方法。当您运行.get(0) 时,您不再使用 jQuery 对象,因此您不能期望从中运行 jQuery 方法。

    如果您想对特定结果运行 .is(),请使用 :eq(index) selector.eq(index) method

    $("div:eq(1)").is(":checked"); // gets second div
    $("div").eq(1).is(":checked"); // gets second div
    

    回复:编辑#2

    鲍勃,你真的应该创造新的 问题,而不是问更多和 更多在这里。

    将 dom 元素转换为 jquery 对象是通过将其传递给选择器来完成的:

    var myBox = document.createElement("div");
    var myBoxJQ = $(myBox);
    

    This 分配给一个变量。取决于你什么时候做。如果“this”指的是一个 jQuery 对象,那么 this 将是一个 jQuery 对象。您可以通过this.get(0) 来转换它。

    this 引用一个jQuery 对象时,您不需要将它包装在$() 中。这是多余的。

    最后,$elemSel.children('td').nodeName 可以这样完成:$elemSel.children('td')[0].nodeName$elemSel.children('td').get(0).nodeName,其中 0 是要访问的项目的索引。

    【讨论】:

    • 感谢您的解释。那么,如果我想使用 Jquery 对象的各个元素并想在它们上运行 Jquery 方法,我是否必须使用“每个”?有没有其他办法?
    • jQuery 对象是一个数组。因此,您可以将 jQuery 对象的每个实例都视为数组。访问该数组中的第一项以在其上运行您的本机 javascript 方法。
    • 我可以请您在这里查看一个关于不同主题的 jquery 问题:stackoverflow.com/questions/13137404/… 吗?
    【解决方案2】:

    还有一个get(index)函数的快捷方式:

    $(selector)[0].nodeName
    

    来源:http://docs.jquery.com/Core/get#index

    【讨论】:

      【解决方案3】:

      因为 jQuery 选择器中可能有多个匹配项,所以您需要从“数组”中取出元素。

      您可以使用 get 方法返回单个 DOM 元素或数组或 DOM 元素。

      例如:

      var elims = $("div").get();
      for(var i in elims)
          alert(elims[i].nodeName);
      

      编辑:

      $elemSel.get(0).is(':checked') 将不起作用,因为您正在获取 Dom 对象,然后尝试在其上使用 jQuery 函数。如果你想获得单个 jQuery 元素,请使用eq

      $elemSel.eq(0).is(':checked');
      

      【讨论】:

        【解决方案4】:

        为了调用本地 DOM 方法,您可以使用 get(index)。或者如果你想使用 jQuery Object 方法,你应该用 jQuery 包装一个原生 DOM 元素,它会将 DOM 元素转换为一个 jQuery Object,这样所有的方法都可以使用。 http://www.linxinshan.com/?p=339

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-06
          • 1970-01-01
          • 2011-11-04
          • 1970-01-01
          • 1970-01-01
          • 2010-10-10
          • 1970-01-01
          • 2011-04-16
          相关资源
          最近更新 更多