首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery 1.9.1属性选择器

jQuery 1.9.1属性选择器
EN

Stack Overflow用户
提问于 2013-03-20 08:46:05
回答 3查看 5.3K关注 0票数 16

背景

从jQuery 1.9开始,.attr(..)方法不再返回属性值,我们现在必须使用.prop(..)。不幸的是,这也适用于通过属性选择器指定的属性,即$("input[value=]")

请参阅http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-

并对.attr.prop之间的差异进行了很好的讨论:

.prop() vs .attr()

My Situation

我目前正在使用像$("input[value=]")$("select[value=]")这样的选择器来选择没有设置值的输入元素。然而,这不再适用于jQuery 1.9,相反,我现在这样做:

代码语言:javascript
复制
var hasValue = function () { return !!($(this).val().length); };
var hasNoValue = function () { return !($(this).val().length); };
$("input").filter(hasValue);
$("select").filter(hasValue);

我的实际选择器稍大一点,可以检查多个有或没有值的元素,所以现在我必须使用.filter(..)将1个选择器字符串拆分为多个选择器。方法调用之间。

问题

是否有与$("[value=]")$("[value!=]")$("[value='abc']")等效的使用属性而不是属性的方法?如果没有,有没有比使用.filter(hasValue).filter(hasNoValue)方法更干净的方法呢?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-20 09:00:28

使用.filter似乎是唯一的方法,但这并不是很糟糕,实际上您可以通过使用.val使它更精确一些

代码语言:javascript
复制
$(":input").filter(function () { return $(this).val() === ""; });

如果这真的是你该谴责的,你可以创建一个自定义选择器。

代码语言:javascript
复制
$.expr[':'].emptyInput = function (elem) {
    return $(elem).is(":input") && $(elem).val() === "";
};

http://jsfiddle.net/ExplosionPIlls/zaZPp/

编辑:您也可以使用this.value而不是$(elem).val()

票数 12
EN

Stack Overflow用户

发布于 2013-03-20 09:06:24

根据upgrade guide的说法

然而,当使用像"inputvalue=abc“这样的选择器时,它应该总是通过value属性进行选择,而不是用户对属性所做的任何更改,例如用户在文本输入中键入的更改。从jQuery 1.9开始,它的行为是正确且一致的。早期版本的jQuery有时会在本应使用该属性的时候使用该属性。

所以这回答了你的第一个问题--没有直接的等价物,重点是使用属性而不是属性。

您的代码看起来很好,但是如果您想更加标准化和可重用,您可以创建一个额外的过滤器。如下所示:

代码语言:javascript
复制
(function($) {
    $.expr[':'].hasValue = function(element) {
        var $element = $(element);
        return element.is(':input') && element.val();
    };
}(window.jQuery));

这将允许您选择像这样的东西:

代码语言:javascript
复制
// Select input elements with value and select elements without value.
$('input:hasValue,select:not(:hasValue)');

以及您需要的其他各种组合。

票数 1
EN

Stack Overflow用户

发布于 2013-11-21 08:49:45

我偶然发现了这一点,只是想发布我发现的另一个解决方案,它在一些其他建议的解决方案不合适的情况下有效。

只需将此事件处理程序添加到您的代码中

代码语言:javascript
复制
    $('input').on('keyup', function(){  
        var value = $(this).val();
        $(this).attr('value', value);
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15513263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档