2017-06-26 7 views
1

だから私は文字列の配列(私は右のそれをやったと思います)があります。文字列の配列に変数をマッチさせますか?

var editableObjects = ['.body-copy', 'img', '.subhead', '.meta', '.caption', '.hyperlink', '.bullet']; 

マウスの下にある要素を取得する機能:

function getMouseElement(event) { 
    var posX = event.clientX, 
    posY = event.clientY; 
    // get the element that is located under the mouse 
    var overElem = document.elementFromPoint(posX, posY); 
    return overElem; 
} 

そして、このjqueryのリスナー「.editable」の要素にマウスオーバーのための時計:私は何をしようとしている

$('#wrapper').on('mouseover', '.editable', function(event) { 
var m = getMouseElement(event); 
console.log(m.className); /*This correctly returns the tag of the element under the mouse*/ 
for (var c = editableObjects.length - 1; c >= 0; c--) { 
    var o = editableObjects[c]; 
    if (m.className = o) { 
     console.log(m + ' matches ' + o); 
    } else {} 
} 
}); 

、リストを関数を見て、エレメントマウスがあるかどうかでありますoverはeditableObjectsの文字列オブジェクトの1つに一致します。私のforループは、一致する要素のどれかの変数をチェックし、一致するものがあれば何かを実行することになっています。しかし、何時間も経ってからは、実際に一致するかどうかにかかわらず、forループが変数内のすべてのオブジェクトの一致を返すことしかできません。

+1

問題は、ifステートメントではなく、 '=='です。単一の「=」は代入演算子であり、「==」は比較に使用されます。 – Raj

+0

おそらく私はあなたの意図を誤解していますが、マウスオーバーイベントが特定の要素に対して発生したときを判断する必要がある場合は、単にイベントリスナーを親要素でなくカーソルの位置を特定するだけです。 on( 'mouseover' ...など) – smilebomb

+0

私はちょうど2番目の引数を作るでしょう。 .on関数は配列の要素のセレクタです – James

答えて

2

=を使用して値を割り当て、等しいかどうかを確認するには、==または===を使用します。 ループよりも組み込み関数を使う方が簡単です。

$('#wrapper').on('mouseover', '.editable', function(event) { 
    var m = getMouseElement(event); 
    if (editableObjects.indexOf(m.className) > -1) { 
     // ... 
    } 
}); 

またはES6 includes()

if (editableObjects.includes(m.className)) 
+0

私は==または===との比較を変更しようとしました。 – Aeromax

+0

私は、 'm.classname'を' m.localName'にswtichingすることによって_something_を取得しました。私は今、変数/オブジェクトが不適切に作成されていることを前提にしています。私はそれをタグにマッチさせることができますが、まだクラスではありません。タグのリストに要素をマッチさせる必要がありますクラスです。 – Aeromax

0

を使用して、この変更をお試しください:

$('#wrapper').on('mouseover', '.editable', function(event) { 
    var m = getMouseElement(event); 
    console.log(m.className); /*This correctly returns the tag of the 
    element under the mouse*/ 
    for (var c = editableObjects.length - 1; c >= 0; c--) { 
    var o = editableObjects[c]; 
    if (m.className == o) { 
     console.log(m + ' matches ' + o); 
    } else {...} 
    } 
}); 

この行を:if (m.className == o) {あなたのラインながら、値を比較:if (m.className = o) {をシンプルindexOf()は、トリックを行いますあなたが正しい軌道に乗るはずの値を割り当てることができるかどうかをテストします。

0

[OK]を取得します。私の変数の要素が正しく認識されていないという問題がありました。文字列であり、オブジェクトや実際の要素ではないため、私は推測しています。 "include"メソッドの動作は次のとおりです。

$('#wrapper').on('mouseover', '.editable', function(event) { 
var m = getMouseElement(event); 
// console.log(m.className); /*This correctly returns the class of the element under the mouse*/ 
for (var c = editableObjects.length - 1; c >= 0; c--) { 
    var o = editableObjects[c]; 
    if (m.className.includes(o)) { 
     console.log(m + ' matches ' + o); 
     // addToolTips(m); 
    } else if (m.localName.includes(o)) { 
     console.log(m + ' matches ' + o); 
     // addToolTips(m); 
    } 
} 
}); 
関連する問題