2016-08-18 1 views
-1

私が書いているコードはアイコンを選択したアプリケーションのためのもので、簡単にコピーして別のプロジェクトに使用できます。 $(this)セレクタに問題があります。私は "グリフホルダー"クラスを持ついくつかのdivを持っていますが、私はどちらかを押しても問題はありません、それは常に "copy_text" divの値を同じクラス、最初のものに変更します。私はそれを私が押したdivに変更したい。jQueryで特定のクラスのdivがあるかどうかを確認してから別のクラスの値を変更する

私が持っているHTMLは次のとおりです。私は現在持っている

<div id="copy_text">Select icon</div> 
<div class="glyph-holder"> 
    <div class="glyph"> 
     <div class="icon-flip-horizontal"></div> 
    </div> 
    <div class="beschrijving-bij-glyph"> 
     icon-flip-horizontal 
    </div> 
</div> 

javascriptのはこれです:has()

$(document).ready(function(){ 

    var displayText = "Empty"; 

    $(".glyph-holder").click(function(){ 

     if($(this).has("icon-flip-horizontal")){ 
      displayText = "icon-flip-horizontal"; 
     }else if($(this).has("icon-flip-vertical")){ 
      displayText = "icon-flip-vertical"; 
     } 

     $("#copy_text").text(displayText); 
    }); 
}); 
+0

'hasClassは()'、 '(持っていない)' –

+0

私はaswellが、それは動作しません、私が使用している場合、それは常に空を返すことを試してみました.hasClassメソッド – fff

答えて

3

あなたのセレクタは、クラスの.接頭辞が含まれていません。また、結果のjQueryオブジェクトのlengthプロパティをチェックする必要があります。これを試してみてください:

var displayText = "Empty"; 
 

 
$(".glyph-holder").click(function() { 
 
    if ($(this).has(".icon-flip-horizontal").length) { 
 
    displayText = "icon-flip-horizontal"; 
 
    } else if ($(this).has(".icon-flip-vertical").length) { 
 
    displayText = "icon-flip-vertical"; 
 
    } 
 
    $("#copy_text").text(displayText); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="copy_text">Select icon</div> 
 
<div class="glyph-holder"> 
 
    <div class="glyph"> 
 
    <div class="icon-flip-horizontal"></div> 
 
    </div> 
 
    <div class="beschrijving-bij-glyph"> 
 
    icon-flip-horizontal 
 
    </div> 
 
</div>

0

あなたは現在hasがクラスを探していることを指定していない、また.has()はjQueryオブジェクトを返すので、.lengthは、要素の数をテストするために使用する必要があります。代わりにこれを試してください。それは、クラスを参照していますので、

$(document).ready(function(){ 

    var displayText = "Empty"; 

    $(".glyph-holder").click(function(){ 

     if($(this).has(".icon-flip-horizontal").length){ 
      displayText = "icon-flip-horizontal"; 
     }else if($(this).has(".icon-flip-vertical").length){ 
      displayText = "icon-flip-vertical"; 
     } 

     $("#copy_text").text(displayText); 
    }); 
}); 

注意は、.has(".icon-flip-horizontal").が重要です。

+0

私はクラス.glyph-holderをクリックすると、常に水平のクラスを使用しますが、それは最初のクラス、つまり水平のクラスも見つけます。 – fff

+0

これはjQueryオブジェクトを返すので、代わりにこれを行う必要があります: '$(this).has("。icon-flip-horizo​​ntal ")。length'。 – Jamy

0

divをidにターゲティングするので、1つのdivのみをターゲティングします。 prev機能を使用してdivでcopy_text divを取得できます。 $(ドキュメント).ready(関数(){

var displayText = "Empty"; 

$(".glyph-holder").click(function(){ 

    if($(this).has(".icon-flip-horizontal")){ 
     displayText = "icon-flip-horizontal"; 
    }else if($(this).has(".icon-flip-vertical")){ 
     displayText = "icon-flip-vertical"; 
    } 

    $(this).prev().text(displayText); 
    }); 
}); 
関連する問題