jQuery的1.9.1属性选择(jQuery 1.9.1 property selector)

2019-07-22 01:39发布

背景

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

见http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-

和上之间的区别好,所以讨论.attr.prop

.prop()与.attr()

我的情况

我目前使用的选择器等$("input[value=]")$("select[value=]")来选择不具有值集合的输入元件。 然而,这不再使用jQuery 1.9的作品,而不是我现在做这样的事情:

var hasValue = function () { return !!($(this).val().length); };
var hasNoValue = function () { return !($(this).val().length); };
$("input").filter(hasValue);
$("select").filter(hasValue);

我实际的选择是有点大,检查有或没有值,所以现在我有我的选择1字符串分割成多个选择与.filter(..)方法调用之间的多个元素。

是否有一个相当于$("[value=]") $("[value!=]") $("[value='abc']")其使用属性,而不是属性的? 如果没有,是否有比使用更清洁的方式.filter(hasValue).filter(hasNoValue)的方法呢?

谢谢

Answer 1:

使用.filter似乎是唯一的出路,但它也不是太糟糕,你实际上可以让它多了几分准确使用.val

$(":input").filter(function () { return $(this).val() === ""; });

如果这真的是应该受到谴责的对你说,你可以创建一个自定义选择。

$.expr[':'].emptyInput = function (elem) {
    return $(elem).is(":input") && $(elem).val() === "";
};

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

编辑:您可能也能逃脱使用this.value代替$(elem).val()



Answer 2:

按照升级指南 :

然而,当像选择“输入[值= ABC]”时,它应该总是由值属性,而不是由用户属性作出的任何改变,例如从它们输入到文本输入进行选择。 在jQuery 1.9中,这个行为正确和一致。 jQuery的早期版本有时会使用属性时,他们应该使用的属性。

所以,这个回答你的第一个问题 - 没有直接的等价,关键是要使用属性,而不是财产。

你的代码看起来很好,但如果你想更加标准化和可重复使用的,你可以创建一个额外的过滤器。 像这样:

(function($) {
    $.expr[':'].hasValue = function(element) {
        var $element = $(element);
        return element.is(':input') && element.val();
    };
}(window.jQuery));

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

// Select input elements with value and select elements without value.
$('input:hasValue,select:not(:hasValue)');

而你需要其他的各种组合。



Answer 3:

我碰到这个,只是想后另一种解决方案,我发现,在某些情况下一些其他建议的解决方案是不恰当的工作。

这个简单的事件处理程序添加到您的代码

    $('input').on('keyup', function(){  
        var value = $(this).val();
        $(this).attr('value', value);
    });


文章来源: jQuery 1.9.1 property selector