2017-04-18 21 views
1

であれば、私は表示のdiv、キーワードが存在し、除外キーワードが存在しない

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 
    } 
}); 

を使用してjQueryの中で働いて成功したキーワード引数を持っている。しかし、私はいくつかの否定的/除外キーワードを組み込むことを望む知っています。しかし、それは完全に作業を取得するために苦労:

だから、
<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
  • ジュニア会員2017インストール - DisplをAYSはDIV「オプションのインストール」
  • ジュニア会員2016 - 「オプションのインストール」が表示されない
  • ファミリーチケットが期限切れDIV - 「オプションのインストール」を表示しませんDIV
  • ファミリーパス - 「オプションのインストール」が表示されないDIV
+0

両方の関数のコメントは同じです:-1でない場合(-1 =見つからない)、それは意図していますか? – Dzmtrs

答えて

0

アレイが提供する他の機能を確認してください。この場合、forEachはあなたが探しているものではありません:

特に、ループ内の値を変更したくないのは、パフォーマンスがひどく、最終結果が最後の反復のみに依存するためです。

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'); 
+0

このブロックはもっとコンパクトに見えます。しかし、まだ動作していませんhttps://jsfiddle.net/4j41sv0h/ – me9867

+0

申し訳ありません、試してください(jQueryで!)https://plnkr.co/edit/CoAkHOKuFnWaO2noG2s?p=preview – me9867

+0

私の悪いです、 'String#includes() '含まれていない、固定されている。jqueryを使用する場合は、jqueryをロードする必要があります。https://jsfiddle.net/4j41sv0h/1/ – Thomas

1

奇妙な方法で&&を使用しようとしています。次のようにそれが動作するはずです:

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

それぞれの式は、JSのすべての値becuase trueまたはfalseに評価されているいずれか(彼らはどちらかtrueまたはfalseになっconvertionながらそれは、ある)ブールまたはブールのような。場所を取るもの、あなたの場合は

です:

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

    && 

    exclusions.forEach(function(elements) { 

しかしexclusions.forEachリターンを何?

この代わりに、私はどのkewordがテキストで発見され、任意のexlucsionの単語がテキストになっているかどうかを示す2つの変数を宣言することをお勧めしたい、その後、あなたが望むものは何でもチェック:この方法で

var hasKeywords = false, 
    hasExclusions = false; 

options.forEach(function(singleOption){ 
    // if at least (!) one option is found in the text you can definitely state the text contains keyword 
    if (text.indexOf(singleOption) >= 0) { hasKeywords = true} 
}); 

exclusions.forEach(function(element){ 
    // if at least on exclusion is found in the text you can say for sure that forbidden words are present 
    if (text.indexOf(element) >= 0) { hasExclusions = true} 
}); 

if (hasKeywords && !hasExclusions) { 
    // do whatever you want 
} 

すべての条件をマカロネのコードに変えるのではなく、両方の条件をチェックして明示的にチェックします。変数名は非常に明確でブール式で使用するのが簡単です

+0

まだ動作していませんhttps://plnkr.co/edit/cwlKYiUYeQoKxc3tkiuX?p=preview – me9867

+0

@ merch89 first、place ''の後に(!)ページが読み込まれます。 'text()' jQuery関数で取得しようとしているテキストが空のためです。 – Dzmtrs

+0

@ merch89では、 'console.log'を使ってどの変数がどのような値を格納しているかを追跡することをお勧めします。私はファイルの内容を更新しました。見てください:https://plnkr.co/edit/cwlKYiUYeQoKxc3tkiuX?p=preview – Dzmtrs

関連する問題