串在一起时,查询中的 JS var 不起作用
JS var inside query does not work when stringed together
我有下面的代码,真的很臃肿
$(".field-name-field-parts-status .field-item:contains('Submitted'), .field-name-field-parts-status .field-item:contains('Saved'), .field-name-field-parts-status .field-item:contains('HMNZ Approved')").addClass('btn-primary');
我试图通过添加 var
来整理它
var fieldItemStatus = $(".field-name-field-parts-status .field-item");
原来是这样
$(fieldItemStatus + ":contains('Submitted'), " + fieldItemStatus + ":contains('Saved'), " + fieldItemStatus + ":contains('HMNZ Approved')").addClass('btn-primary');
但是它停止工作了,谁能告诉我我做错了什么?谢谢
因为您正试图将一个 jQuery 对象和一个字符串相加。它不是那样工作的。
var fieldItemStatus = $(".field-name-field-parts-status .field-item");
应该是字符串
var fieldItemStatus = ".field-name-field-parts-status .field-item";
另一个选项是使用过滤器。
您可以使用 filter
方法:
fieldItemStatus.filter(":contains('Submitted'), :contains('Saved'), :contains('HMNZ Approved')").addClass('btn-primary');
另一种选择是使用 filter
回调函数:
var items = ['Submitted', 'Saved', 'HMNZ Approved'];
fieldItemStatus.filter(function(_, el) {
return items.some(function(item) {
return el.textContent.indexOf(item) > -1;
});
});
.
你需要使用.filter()
fieldItemStatus.filter(":contains('Submitted'), :contains('Saved'), :contains('HMNZ Approved')").addClass('btn-primary');
fieldItemStatus
是一个对象所以
fieldItemStatus + ":contains('Submitted'), " + fieldItemStatus + ":contains('Saved'), " + fieldItemStatus + ":contains('HMNZ Approved')
将创建一个类似于 [Object object]:contains('Submitted'), [Object object]:contains('Saved'), [Object object]:contains('HMNZ Approved')
的字符串
删除 fieldItemStatus 前面的 $
var fieldItemStatus = ".field-name-field-parts-status .field-item";
因为您想使用 jQuery 对象来连接字符串。正确的做法是始终使用字符串。
var fieldItemStatus = ".field-name-field-parts-status .field-item";
$(fieldItemStatus + ":contains('Submitted'), " + fieldItemStatus + ":contains('Saved'), " + fieldItemStatus + ":contains('HMNZ Approved')").addClass('btn-primary');
一种更程序化的方法。这样,如果您想轻松更改选择器,只需更改 contains 数组即可。您可以将其转换为一个函数,以便在脚本的其他地方按需轻松检索您的选择器。
var contains = ['Submitted','Saved','HMNZ Approved'];
var selector = '';
for(var i = 0; i < contains.length; i++) {
selector += '.field-name-field-parts-status .field-item:contains("' + contains[i] + ')';
if(i < contains.length - 1) selector += ', ';
}
$(selector).addClass('btn-primary');
我有下面的代码,真的很臃肿
$(".field-name-field-parts-status .field-item:contains('Submitted'), .field-name-field-parts-status .field-item:contains('Saved'), .field-name-field-parts-status .field-item:contains('HMNZ Approved')").addClass('btn-primary');
我试图通过添加 var
var fieldItemStatus = $(".field-name-field-parts-status .field-item");
原来是这样
$(fieldItemStatus + ":contains('Submitted'), " + fieldItemStatus + ":contains('Saved'), " + fieldItemStatus + ":contains('HMNZ Approved')").addClass('btn-primary');
但是它停止工作了,谁能告诉我我做错了什么?谢谢
因为您正试图将一个 jQuery 对象和一个字符串相加。它不是那样工作的。
var fieldItemStatus = $(".field-name-field-parts-status .field-item");
应该是字符串
var fieldItemStatus = ".field-name-field-parts-status .field-item";
另一个选项是使用过滤器。
您可以使用 filter
方法:
fieldItemStatus.filter(":contains('Submitted'), :contains('Saved'), :contains('HMNZ Approved')").addClass('btn-primary');
另一种选择是使用 filter
回调函数:
var items = ['Submitted', 'Saved', 'HMNZ Approved'];
fieldItemStatus.filter(function(_, el) {
return items.some(function(item) {
return el.textContent.indexOf(item) > -1;
});
});
.
你需要使用.filter()
fieldItemStatus.filter(":contains('Submitted'), :contains('Saved'), :contains('HMNZ Approved')").addClass('btn-primary');
fieldItemStatus
是一个对象所以
fieldItemStatus + ":contains('Submitted'), " + fieldItemStatus + ":contains('Saved'), " + fieldItemStatus + ":contains('HMNZ Approved')
将创建一个类似于 [Object object]:contains('Submitted'), [Object object]:contains('Saved'), [Object object]:contains('HMNZ Approved')
删除 fieldItemStatus 前面的 $
var fieldItemStatus = ".field-name-field-parts-status .field-item";
因为您想使用 jQuery 对象来连接字符串。正确的做法是始终使用字符串。
var fieldItemStatus = ".field-name-field-parts-status .field-item";
$(fieldItemStatus + ":contains('Submitted'), " + fieldItemStatus + ":contains('Saved'), " + fieldItemStatus + ":contains('HMNZ Approved')").addClass('btn-primary');
一种更程序化的方法。这样,如果您想轻松更改选择器,只需更改 contains 数组即可。您可以将其转换为一个函数,以便在脚本的其他地方按需轻松检索您的选择器。
var contains = ['Submitted','Saved','HMNZ Approved'];
var selector = '';
for(var i = 0; i < contains.length; i++) {
selector += '.field-name-field-parts-status .field-item:contains("' + contains[i] + ')';
if(i < contains.length - 1) selector += ', ';
}
$(selector).addClass('btn-primary');