显示div,如果存在关键字且不存在排除关键字

时间:2017-04-18 13:53:13

标签: javascript jquery html

我使用

在jQuery中使用了成功的关键字参数
var text = $("#pbtitle").text();

    options.forEach( function( element ) {
    if ( text.indexOf( element ) != -1 ) {    // if its NOT -1 (-1 = not found)
      $('.install_option').css('display','block'); // then we found it .. do your magic
    }
});

但是,我知道希望合并一些否定/排除关键字。但努力让它充分发挥作用:

<h1 id="pbtitle"><?php echo $heading_title; ?></h1>

<div class="install_option" style="display:none; margin-bottom: 25px; overflow:hidden; box-sizing:border-box;">              
    <p>Take upgrade option</p>
</div>

var options = ['Adult Membership','Jnr Membership','Family Ticket'];
var exclusions = ['2016','Expired,'Void'];
var text = $("#pbtitle").text();

    options.forEach( function( element ) {
    if ( text.indexOf( element ) != -1 )     // if its NOT -1 (-1 = not found)

    &&

    exclusions.forEach( function( elements ) {
    if ( text.indexOf( elements ) == 1 ) {    // if its NOT -1 (-1 = not found)


      $('.install_option').css('display','block'); // then we found it .. do your magic   
    }
    else
    {
      $('.install_option').css('display','none'); 
    }
});

“因此,如果选项关键字 匹配并且排除关键字不存在。显示'安装选项'div。如果不匹配,请保持div隐藏”

示例结果

  • 成人会员资格 - 显示“安装选项”DIV
  • Jnr Membership 2017 - 显示“安装选项”DIV
  • Jnr会员资格2016 - 不显示“安装选项”DIV
  • 家庭门票已过期 - 未显示“安装选项”DIV
  • 家庭通行证 - 不显示“安装选项”DIV

2 个答案:

答案 0 :(得分:1)

您尝试以奇怪的方式使用&&。它应该如下工作:

expression1 && expression2 && ... && expreesionN

每个表达式都计算为truefalse,因为JS中的所有值都是布尔值或类似布尔值(也就是说,转换时它们变为true或{{1 }})。

在你的情况下发生的是:

false

但是if ( text.indexOf( element ) != -1 ) // if its NOT -1 (-1 = not found) && exclusions.forEach( function( elements ) { 会返回什么?

除此之外,我建议声明两个变量,指示文本中是否找到任何关键词,文本中是否有任何exlucsion词,然后检查你想要的任何内容:

exclusions.forEach

通过这种方式,您可以检查这两个条件并明确检查它们,而不是将所有内容都转换为makaronee代码。变量名非常清楚,易于在布尔表达式中使用

答案 1 :(得分:0)

查看Arrays提供的其他功能。在这种情况下,forEach找不到您要找的内容:

尤其是你不想改变循环中的display值,因为它的性能很差,最终结果只取决于最后一次迭代。

var options = ['Adult Membership','Jnr Membership','Family Ticket'];
var exclusions = ['2016','Expired','Void'];
var text = $("#pbtitle").text();

var inText = word => text.includes(word);
$('.install_option').css('display', options.some(inText) && !exclusions.some(inText)? 'block': 'none');