所以我有一个字符串数组(我想我做对了):
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循环来为变量中的每个对象返回一个匹配项,无论它是否实际匹配。
答案 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);
}
}
});