当串在一起时,JS var里面的查询不起作用

时间:2015-05-20 01:18:11

标签: javascript jquery contains

我有以下代码非常臃肿

$(".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');

但它停止了工作,谁能告诉我我做错了什么?感谢

6 个答案:

答案 0 :(得分:2)

因为您正在尝试将jQuery对象和字符串一起添加。它不会那样工作。

var fieldItemStatus = $(".field-name-field-parts-status .field-item");

应该是一个字符串

var fieldItemStatus = ".field-name-field-parts-status .field-item";

其他选项是使用过滤器。

答案 1 :(得分:1)

您可以使用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;
   });  
});

答案 2 :(得分: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')

的字符串

答案 3 :(得分:1)

为fieldItemStatus

删除前面的$
 var fieldItemStatus = ".field-name-field-parts-status .field-item";

答案 4 :(得分:1)

因为你想使用jQuery Object来连接字符串。正确的方法是始终使用字符串。

var fieldItemStatus = ".field-name-field-parts-status .field-item";
$(fieldItemStatus + ":contains('Submitted'), " + fieldItemStatus + ":contains('Saved'), " + fieldItemStatus + ":contains('HMNZ Approved')").addClass('btn-primary');

答案 5 :(得分:0)

更具程序性的方法。这样,如果您想轻松更改选择器,只需更改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');