如果标签包含这个而不是这个前缀 *

If label contains this and not this prepend *

如果标签包含城市、州和邮政编码,我将尝试添加 *。此外,我只希望它在标签中不存在 * 时发生。不确定是否可以将包含和不包含连接在一起。另外 - 我无法编辑表格,有些字段随机输入 *。这里有两种方法对我来说失败了。

这里是Fiddle-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( "* " );

似乎有效,您只是缺少 )

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

https://jsfiddle.net/5686hmnn/

与其设置复杂的查询,不如在 prepend 函数本身中检查文本:

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

Fiddle


indexOf 函数在字符串中查找文本,如果找不到则 returns -1

所以如果 txt'City''AddressCityStateZip'.indexOf(txt) 将 return 7

如果匹配,conditional (ternary) operator return 是一个星号 – 否则,它 return 什么都没有。

包含选择器非常慢,添加一整套选择器对提高速度或可维护性没有帮助。您应该使用 .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")