如果标签包含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( "* " );
答案 0 :(得分:2)
您可以检查prepend
函数本身内的文本,而不是设置复杂的查询:
$('label:not(:contains("*"))').prepend(function(_, txt) {
return 'AddressCityStateZip'.indexOf(txt)>-1 ? '* ' : '';
});
<小时/>
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( "* " );
答案 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")