我有元素.tousers
,它是一个值为car
的输入文本字段。
if($("#compose-child-container-1").find(".tousers").val()=="car") {
}
我想addClass
.tousers
元素,但我如何选择它?
答案 0 :(得分:3)
一个简单的解决方案是查看每个.tousers
元素
$("#compose-child-container-1 .tousers").each(function() {
if($(this).val() == 'car') $(this).addClass('className');
});
注意: [value="car"]
不适用于用户修改的值。因此,循环几乎是唯一的解决方案。
答案 1 :(得分:3)
这里属性选择器不起作用,因为一旦用户修改了输入字段中的值,属性没有更新,只有dom elements属性被更新
我会做的是
$("#compose-child-container-1").find(".tousers").filter(function(){
return this.value == 'car'
}).addClass('someclass')
答案 2 :(得分:0)
使用$(this)
。在您的函数中,您应该使用$(selector).each(function() { // code }
答案 3 :(得分:0)
试试这个:
$('#compose-child-container-1 .tousers').each(function() {
var el = $(this);
if (el.val() == 'car') {
el.addClass('found');
}
});
答案 4 :(得分:0)
我会使用filter:
$("#compose-child-container-1 .tousers").filter(function() {
return this.value == "car";
}).addClass('found');
这将逻辑分开,以便从您实际想要的内容中找到元素(在此实例中为addClass)。
答案 5 :(得分:0)
$("#compose-child-container-1").find(".tousers").each(function(){
if($(this).val()=='car'){
$(this).addClass('className');
}
})
答案 6 :(得分:0)
如果您确定最多只有一个.tousers
元素:
var $_tousers = $('#compose-child-container-1 .tousers');
if ($_tousers.val() == 'car') $_tousers.addClass('found');
如果不止一个,如果第一个的值是'car',那么将在所有类上设置该类,而不管其他的值。
或者,如果您对此感到满意,可以创建一个自定义选择器来测试元素的当前值。
$.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(使用自定义选择器或插件)是非常值得的。
答案 7 :(得分:0)
尝试这个,它快速而干净:
$("#compose-child-container-1").find(".tousers").filter(function () {
return this.value === 'car';
}).addClass('your-class');