"无功"在我的代码中没有用。
它始终显示'hasclass = 0 and body has class'
,但应hasclass = yes and body has class
setInterval(function() {
if($('.webMessengerMessageGroup').length>0) {
if(hasclass === 'dooainn') {
console.log('hasclass = yes and body has class');
} else {
var hasclass = 'dooainn';
console.log('hasclass = 0 and body has class');
$('._38 p').click(function () {
var message_text = $(this).text();
console.log(message_text);
});
}
} else {
console.log('body has not class');
}
},2000);
答案 0 :(得分:2)
var hasclass未在if的范围内定义。如果你将var移到函数之外,它应该可以工作。
var hasclass = '';
setInterval(function() {
if($('.webMessengerMessageGroup').length>0) {
if(hasclass === 'dooainn') {
console.log('hasclass = yes and body has class');
} else {
hasclass = 'dooainn';
console.log('hasclass = 0 and body has class');
$('._38 p').click(function () {
var message_text = $(this).text();
console.log(message_text);
});
}
} else {
console.log('body has not class');
}
},2000);
答案 1 :(得分:1)
您可能听说过var
已被提升,并且#34;所以你期待你的整个
var hasclass = 'dooainn';
行向上移动到函数的顶部。但这不是它的工作原理。只有var hasclass
部分被悬挂。 hasclass = 'dooainn';
部分仍然存在。
所以你的代码真正做的是:
setInterval(function() {
var hasclass = undefined; // <==
if($('.webMessengerMessageGroup').length>0) {
if(hasclass === 'dooainn') {
console.log('hasclass = yes and body has class');
} else {
hasclass = 'dooainn'; // <==
console.log('hasclass = 0 and body has class');
$('._38 p').click(function () {
var message_text = $(this).text();
console.log(message_text);
});
}
} else {
console.log('body has not class');
}
},2000);
所以hasclass
永远不会是=== "dooainn"
。
更多(在我的博客上):Poor, misunderstood var
您可能打算在回调中声明 ,以便在调用之间保持该值:
var hasclass; // <==
setInterval(function() {
if($('.webMessengerMessageGroup').length>0) {
if(hasclass === 'dooainn') {
console.log('hasclass = yes and body has class');
} else {
hasclass = 'dooainn'; // <==
console.log('hasclass = 0 and body has class');
$('._38 p').click(function () {
var message_text = $(this).text();
console.log(message_text);
});
}
} else {
console.log('body has not class');
}
},2000);
现在,在第二次调用之后,它可能具有该值,因为您可能已经在之前的迭代中分配了它。
答案 2 :(得分:0)
其他答案是正确的,您的问题是 var 声明的范围仅限于“else”语句。但是,我想我会为你提供一个替代方案,以便你的setInterval不会继续永远运行。如果上次检查失败,此代码仅在等待2秒后重新执行webMessengerMessageGroup检查。
var addClickFunc = function(){
if($('.webMessengerMessageGroup').length>0) {
$('._38 p').click(function () {
var message_text = $(this).text();
console.log(message_text);
});
} else {
setTimeout(addClickFunc,2000);
}
};
setTimeout(addClickFunc,2000);
除了必须检查选择器是否存在之外的另一种选择是使用委托,可以随时设置。
$(document).on('click', '._38 p',function () {
var message_text = $(this).text();
console.log(message_text);
});