如果标签包含这个而不是这个前缀 *
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( "* " );
与其设置复杂的查询,不如在 prepend
函数本身中检查文本:
$('label:not(:contains("*"))').prepend(function(_, txt) {
return 'AddressCityStateZip'.indexOf(txt)>-1 ? '* ' : '';
});
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")
如果标签包含城市、州和邮政编码,我将尝试添加 *。此外,我只希望它在标签中不存在 * 时发生。不确定是否可以将包含和不包含连接在一起。另外 - 我无法编辑表格,有些字段随机输入 *。这里有两种方法对我来说失败了。
这里是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( "* " );
与其设置复杂的查询,不如在 prepend
函数本身中检查文本:
$('label:not(:contains("*"))').prepend(function(_, txt) {
return 'AddressCityStateZip'.indexOf(txt)>-1 ? '* ' : '';
});
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")