如果标签包含此而不是此前置*

时间:2015-04-14 20:37:41

标签: javascript jquery contains

如果标签包含city,state和zip,我正在尝试添加*。此外,如果标签中不存在*,我只希望它发生。不确定是否可以连接包含但不包含在一起。另外 - 我无法编辑表格,有些字段随机输入。以下两种方式对我来说都失败了。

这是小提琴 - https://jsfiddle.net/4o24kyLw/2/

这是jQuery

//$("label:contains('City'):not(:contains('*'),label:contains('Address'),label:contains('State'),label:contains('Zip')").prepend( "* " );


$("label:contains('City'):not(:contains('*'),label:contains('Address'),label:contains('State'),label:contains('Zip')").prepend( "* " );

得到答案......但也许我可以把它带到另一个方向......你能简化包含吗?类似于label:contains('City', 'State', 'etc...'):not(:contains('*')).prepend( "* " )或者可能有效的方式:]

如果无法简化,就会出现这种情况 - $("label:contains('City'):not(:contains('*')),label:contains('Mailing Address'):not(:contains('*')),label:contains('State'),label:contains('Postal Code'):not(:contains('*'))").prepend( "* " );

3 个答案:

答案 0 :(得分:2)

您可以检查prepend函数本身内的文本,而不是设置复杂的查询:

$('label:not(:contains("*"))').prepend(function(_, txt) {
  return 'AddressCityStateZip'.indexOf(txt)>-1 ? '* ' : '';
});

Fiddle

<小时/> indexOf 函数在字符串中查找文本,如果找不到,则返回-1

因此,如果txt'City''AddressCityStateZip'.indexOf(txt)将返回7

conditional (ternary) operator如果匹配则返回星号 - 否则,它不返回任何内容。

答案 1 :(得分:1)

似乎工作,你只是错过了)

$("label:contains('City'):not(:contains('*')),label:contains('Address'),label:contains('State'),label:contains('Zip')").prepend( "* " );

https://jsfiddle.net/5686hmnn/

答案 2 :(得分:0)

包含选择器非常慢,添加一整套选择器并不能提高速度或可维护性。您应该使用.filter()代替:

$("label").filter(function(idx){
   var $(this).text() || '';
   return (
             (f.indexOf('City') > -1) ||
             (f.indexOf('Address') > -1) ||
             (f.indexOf('State') > -1) ||
             (f.indexOf('Zip') > -1)
          ) && 
          (f.indexOf('*') !== 0);
}).addClass('required');

另外,您是否考虑过使用css代替呼​​叫?它提供了几个优点。其中一个是你真的不必担心修改文本。

label.required:before { content: '* ' }

此外,您可以从标记中设置这个样式,而不需要涉及到javascript:

<label class="required">..</label>

但是如果你确实需要使用javascript,那么找到这些标签要容易得多:

$("label.required")