【问题标题】:Want to extend jQuery to select by name attribute more elegantly想扩展 jQuery 以更优雅地按名称属性选择
【发布时间】:2011-12-17 14:23:59
【问题描述】:

如果我需要经常使用这种选择器格式,我会觉得很麻烦:

$('[name="someElementName"]').val()

我考虑过扩展 jQuery 以便我可以使用这样的格式:

$('@someElementName').val()

我知道 jQuery 只是遵循 CSS 的约定,而我正在打破约定。

关于“@”的选择,我只是选择了一个似乎没有用于选择器并且不太可能产生冲突的特殊字符。如果有人有更好的建议,我愿意接受建议。

我无法选择不使用名称属性作为选择器的一部分。

我正在考虑使用这样的正则表达式:

selectorString.replace(/\@([\d\w\s\-]*)/g, '[name="$1"]')

从这里开始,我被困在如何扩展 jQuery 以利用该正则表达式,以便我可以使用像 "$('@someElementName').val(); 这样的代码;

【问题讨论】:

    标签: jquery jquery-plugins jquery-selectors css-selectors


    【解决方案1】:

    这个怎么样:

    (function($) {
        $.named = function(name, context) {
            context = context || document;
            return $(context.getElementsByName(name));
        }
    })(jQuery);
    

    用法:

    $.named('foo').val();
    

    http://jsfiddle.net/alnitak/n6nEW/

    【讨论】:

    • @Alnitak 恕我直言,它不像我想要的解决方案那么优雅,但它比我原来的问题有所改进。我已经建立在您的代码之上,因此我们可以进行链接:您的代码加上 $.fn.named = function(arg){ return $(this).filter('[name="' + arg + '"]'); }; 请参阅 jsfiddle.net/CE2Mm - 我不知道这段代码是否代表了良好的做法。
    • @DG 如果您要走那条路,请改用.filter 中的函数,例如.filter(function(idx) { return this.name === arg })
    • @DG 直接向 DOM 询问您想要的元素也比让 jQuery 过多并且它们丢弃不需要的元素的结果更有效。
    猜你喜欢
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多