将变量与字符串数组匹配?

时间:2017-06-26 14:24:51

标签: javascript jquery arrays for-loop mouseover

所以我有一个字符串数组(我想我做对了):

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

我正在尝试做的是让函数查看列表并查看鼠标所在的元素是否匹配editableObjects中的一个字符串对象。我的for循环应该检查任何匹配元素的变量,然后如果匹配则执行某些操作。但是经过几个小时后,我只能得到for循环来为变量中的每个对象返回一个匹配项,无论它是否实际匹配。

3 个答案:

答案 0 :(得分:2)

您使用=中的if (m.className = o)分配值,以检查是否相等,使用=====。 使用内置函数比循环更容易。一个简单的indexOf()就可以解决问题:

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

或使用es6 includes()

if (editableObjects.includes(m.className))

答案 1 :(得分: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) {测试是否可以分配值......这应该会让您进入正确的轨道。

答案 2 :(得分:0)

好的,明白了。这似乎是我的变量中的元素没有被正确识别的问题,我猜是因为它们是字符串而不是对象或实际元素。 "包括"方法有效:

$('#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);
    }
}
});