4

Is there a way to conditionally set an attribute using jQuery? For example, I want to simplify this:

$(element).val('99');

if ([condition]) {
    $(element).attr('myAttr', 1);
}

This works, but forces me break the chaining of method calls. Instead, I would prefer something like this:

$(element).val('99').attr('myAttr', 1, [condition]);

So that the attribute is only set if the condition is true. How would I do this?

4

3 に答える 3

10

よく使用できます:

$(element).val('99').attr('myAttr',[condition] ? 1 : $(element).attr('myAttr'));

デモはこちら

オプション 2、ただ: $(element).val('99').attr('attr',[condition] ? 1 : undefined).

デモはこちら

@FrédéricHamidi が言及したように、このオプション 2 は、古いバージョンの jQuery でチェーンを壊す可能性があることに注意してください。ただし、jQuery 1.7.2 から動作します

于 2013-09-26T12:52:55.863 に答える
7

条件が false のときに属性値をリセットしたくない場合は、関数を受け取る形式をattr()使用できます。

$(element).val("99").attr("myAttr", function() {
    if (condition) {
        return 1;
    }
});

関数から何も返さない (または同等の を返すundefined) と、属性値は変更されません。

于 2013-09-26T12:54:56.223 に答える
1

これを試して、

var attrValue=[condition] ? 1 : 0;
$(element).val('99').attr('myAttr',attrValue);

チェーンが必要な場合は、次chainのような状態にすることができます。

if ([condition]) {
    $(element).val('99').attr('myAttr', 1);
}
else
{
    $(element).val('99');
}

これを試して、

$inpt=$(element).val('99');
if(true)
{
    $inpt.attr('myAttr',1);// use $inpt for setting attribute
}

フィドル

于 2013-09-26T12:54:40.113 に答える