【问题标题】:Can I query for attribute key wildcards in jQuery?我可以在 jQuery 中查询属性键通配符吗?
【发布时间】:2011-05-01 22:05:38
【问题描述】:

我想选择属性名称(键)以集合字符串开头的元素。用例:jQuery UI dialog 创建按钮,其唯一标识符是具有顺序值的伪随机自定义属性,例如 jQuery1288273859637="40"

我想根据属性的 name 是 jQuery*(以 jQuery 开头)这一事实进行选择

【问题讨论】:

    标签: jquery css-selectors custom-attributes


    【解决方案1】:

    获取对话框的引用,然后使用 css 选择器找到按钮。 firebug(或 google chrome 开发者工具)对于确定要查找的内容很有用。

    【讨论】:

    • 这不起作用 - OP 正在寻找属性 name 以 jQuery 开头 - 我犯了同样的错误
    • @Jake - OP 代表“原始海报”。
    【解决方案2】:

    我唯一想到的就是测试.filter() 中每个 DOM 元素的单个键。

    这将非常低效,但如果你真的想要它,它可能看起来像这样:

    $('body *').filter(function() {
        for( var k in this ) {
            if( this.hasOwnProperty(k) && k.indexOf( "jQuery" ) === 0 ) {
                return true;
            }
        }
        return false;
    });
    

    这将遍历<body> 中的所有 元素,然后遍历每个元素的键/值属性,测试每个键以查看它是否以"jQuery" 开头。如果是这样,它返回true,并且循环被打破。如果不是,则在测试所有属性后返回false

    我会找到另一种方法。说真的,不要这样做。

    【讨论】:

    • 如果您知道元素将出现在给定的父级下(如 jQuery 对话框),您可以通过传入上下文来提高性能。不过还是很讨厌:)
    • @Steve - 你说得对,我忽略了这个问题是关于 UI 对话框的。限制元素会有所帮助,但就像你说的那样,仍然很讨厌。
    • 如果我最后没有从不同的角度解决问题,这将是首选方法(请参阅已检查的答案)我会缩小查询的上下文以包含其大小,但
    【解决方案3】:

    您正在查看的属性是 jQuery expando ...定位这些属性是完全没用的,因为“jQuery”之后的数字基于当前时间并随着每次页面重新加载而变化(ref1 & ref2)。

    最好在你的基础 HTML 中定位一个类。例如,jQuery UI 对话框应该具有以下基本 HTML (ref):

    <div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable">
       <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
          <span id="ui-dialog-title-dialog" class="ui-dialog-title">Dialog title</span>
          <a class="ui-dialog-titlebar-close ui-corner-all" href="#"><span class="ui-icon ui-icon-closethick">close</span></a>
       </div>
       <div style="height: 200px; min-height: 109px; width: auto;" class="ui-dialog-content ui-widget-content" id="dialog">
          <p>Dialog content goes here.</p>
       </div>
    </div>
    

    找到您要定位的 id 或类并使用它!

    如果您需要定位对话框中的按钮,请使用以下内容:

    $('.ui-dialog .ui-button:contains("Cancel")')
    

    【讨论】:

    • fudgey - 不是 完全没用,因为 OP 想要针对那些 以 jQuery 开头的对象,但按类选择肯定会 much 比过滤属性名更好。
    • 我最终采用了类似的解决方案:$(":contains('Transfer')", $(".ui-button", ".ui-dialog"))[0] .parentElement 但我会改用您的代码
    • @patrick dw:你说得对,我猜我的“完全没用”的说法有点强。我只是想说有更好的方法可以做到这一点,感谢您的反馈:)
    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2011-05-13
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多