【问题标题】:If label contains this and not this prepend *如果标签包含这个而不是这个前置 *
【发布时间】:2015-04-14 20:37:41
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery contains


    【解决方案1】:

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

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

    Fiddle


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

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

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

    【讨论】:

    • 我很好地遵循了这一点,但是您能否提供有关该功能的 cmets。
    • 当然,已更新。如果还有什么不清楚的地方,请告诉我。
    【解决方案2】:

    似乎有效,您只是缺少)

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

    https://jsfiddle.net/5686hmnn/

    【讨论】:

    • D'oh - 我以为我走上了正轨。有时,第二双眼睛会发现最简单的错误 - 谢谢。
    • 嘿,它肯定会发生。没问题:)
    • 也许我可以换个方向……你能简化一下包含吗?类似于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( "* " );
    • 明白了。我想是这样的。在这种情况下,Rick 的答案是最好的。
    【解决方案3】:

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

    【讨论】:

    • 我无法编辑表格,有些字段有 * 随机输入。
    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多