0

我有元素.tousers,它是一个带有值的输入文本字段car

if($("#compose-child-container-1").find(".tousers").val()=="car") {

                                    }

我想要addClass那个.tousers元素,但我该如何选择它?

4

8 回答 8

3

一个简单的解决方案是查看每个.tousers元素

$("#compose-child-container-1 .tousers").each(function() {
    if($(this).val() == 'car') $(this).addClass('className');
});

注意: [value="car"]不适用于用户修改的值。因此,循环几乎是唯一的解决方案。

于 2013-07-10T13:15:09.597 回答
3

这里属性选择器将不起作用,因为一旦用户修改输入字段中的值,属性不会更新,只会更新 dom 元素属性

我会做的是

$("#compose-child-container-1").find(".tousers").filter(function(){
    return this.value == 'car'
}).addClass('someclass')
于 2013-07-10T13:21:05.157 回答
0

如果您确定最多有一个.tousers元素:

var $_tousers = $('#compose-child-container-1 .tousers');
if ($_tousers.val() == 'car') $_tousers.addClass('found');

但是,如果有多个,则如果第一个的值为“汽车”,则将在所有这些上设置类,而不管其他的值如何。

或者,如果您想对此感到满意,您可以创建一个自定义选择器来测试元素的当前值。

$.expr[':'].value = function(obj, index, meta, stack) {
    console.log(meta);
    var candidateValue = meta[3];
    return (candidateValue === $(obj).val());
};

...

$('#compose-child-container-1 .tousers:value(car)').addClass('found');

虽然这需要构建一个新的选择器来测试不同的值。

或者,你可以有一个插件。

$.fn.withVal = function(val) {
    return this.filter(function() { return this.value == val; });
}

...

$('#compose-child-container-1 .tousers').withVal('car').addClass('found');

请注意,扩展 jQuery(使用自定义选择器或插件)只有在您想要使用它几次时才真正值得。

于 2013-07-10T13:25:48.113 回答
0

试试这个,它又快又干净:

$("#compose-child-container-1").find(".tousers").filter(function () { 
   return this.value === 'car';
}).addClass('your-class');
于 2013-07-10T13:26:05.823 回答
0

使用$(this). 在您的功能中,您应该使用$(selector).each(function() { // code }

于 2013-07-10T13:16:19.183 回答
0

尝试这个:

$('#compose-child-container-1 .tousers').each(function() {
    var el = $(this);
    if (el.val() == 'car') {
        el.addClass('found');
    }
});
于 2013-07-10T13:17:15.890 回答
0

我会使用过滤器

$("#compose-child-container-1 .tousers").filter(function() {
    return this.value == "car";
}).addClass('found');

这将查找元素的逻辑与您实际想要对它们执行的操作分开(在本例中为 addClass)。

于 2013-07-10T13:22:18.107 回答
0
$("#compose-child-container-1").find(".tousers").each(function(){
if($(this).val()=='car'){
$(this).addClass('className');
}
})
于 2013-07-10T13:22:30.760 回答