【问题标题】:Jquery selector input[type=text]')Jquery 选择器输入[type=text]')
【发布时间】:2012-05-18 09:15:44
【问题描述】:

我写了一个代码,基本上像这样选择所有input type=text元素:

$('.sys input[type=text]').each(function () {}

如何将其更改为选择input[type=text]select

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用普通的 css 选择器:

    $('.sys input[type=text], .sys select').each(function() {...})
    

    如果你不喜欢重复:

    $('.sys').find('input[type=text],select').each(function() {...})
    

    或者更简洁,传入context 参数:

    $('input[type=text],select', '.sys').each(function() {...})
    

    注意:在内部 jQuery 会将上述转换为 find() 等效

    http://api.jquery.com/jQuery/

    在内部,选择器上下文是用 .find() 方法实现的, 所以 $('span', this) 等价于 $(this).find('span')。

    我个人认为第一个替代方案是最易读的 :),不过你可以接受

    【讨论】:

    • 由于context form 使用find formfind formcontext form 更有效(避免调用函数)。这对几乎所有使用的选择器都有效。然后,IMO find formnormal CSS selector 更有效,因为选择器的两个部分都是相对于根节点的,而在 find form 中,只有 .sys 部分是相对于它的,然后是 @987654336 @ 是在一组更小的元素上执行的,因此它可能会更快(但这需要通过测试来验证)
    • @pomeh 我可以看到你来自哪里,但如果$ 调用的性能对你的应用来说是重要,请完全避免使用jQuery :)。这个答案试图回答 OP 的问题,如果它是性能问题,那么这个答案首先不会在这里。无论如何感谢您的评论:),感谢它
    • 我的评论不是关于一个$ 呼叫的性能,而是关于一个应用程序中存在的所有$ 呼叫。 IMO,当你有不同的方式做同样的事情时,我总是尽量选择表现更好的一种。 slow performance === unhappy users。此外,我们可以 both 用多个答案回答一个 OP 的问题(就像您所做的那样),并提供每个答案的优点/不便(就像我在评论中所做的那样)。 IMO 重要的是要注意为什么所有答案都不同,同时提供相同的结果。此外,我们可以编写执行缓慢的普通 JavaScript 代码:JavaScript !== performance
    • @pomeh 我关于性能的观点是,如果您真的关心性能,请不要使用 jQuery 的 $,具体分类您的 div 并使用 document.getElemenById/ElementsByClassName,而不是与通过$ 对选择器进行大量检查/字符串解析相比,jQuery 并不以其高性能库而闻名。老实说,我还没有看到一个应用程序因为调用$ 太多而变慢,如果你有一个有这个问题的网站,请告诉我,我很感兴趣 :)
    • @pomeh 是的,我完全同意你关于 JS 的观点!= 性能 :),归根结底,归根结底,程序员还是要真正编写明智的代码。感谢您的简短讨论,祝您有美好的一天:)
    【解决方案2】:
    $('.sys').children('input[type=text], select').each(function () { ... });
    

    编辑:实际上,上面的这段代码相当于子选择器.sys > input[type=text],如果你想要后代选择(.sys input[type=text]),你需要使用@NiftyDude 给出的选项。

    更多信息:

    【讨论】:

    • 你输入的是chilren而不是children
    【解决方案3】:

    如果您有多个输入作为表单或表格中的文本需要遍历,我这样做了:

    var $list = $("#tableOrForm :input[type='text']");
    
    $list.each(function(){
        // Go on with your code.
    });
    

    我所做的是检查每个输入以查看类型是否设置为“文本”,然后它会抓取该元素并将其存储在 jQuery 列表中。然后,它将遍历该列表。您可以像这样为当前迭代设置一个临时变量:

    var $currentItem = $(this);
    

    这会将当前项目设置为每个循环的当前迭代。然后你可以对 temp 变量做任何你想做的事情。

    希望这对任何人都有帮助!

    【讨论】:

      【解决方案4】:
      $('input[type=text],select', '.sys');
      

      循环:

      $('input[type=text],select', '.sys').each(function() {
         // code
      });
      

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-21
        • 2011-04-15
        • 2012-03-25
        相关资源
        最近更新 更多