当前在新闻滚动条上工作 - 请参阅此处的实时示例 - EXAMPLE
当我按下一个/上一个箭头时,我收到错误日志Uncaught Syntax error, unrecognized expression: [object Object]
为什么会出现这个问题?语法中的错误在哪里?
jQuery代码:
(function($) {
/*! Scroller
---------------------------------------------*/
$.fn.Scroller = function() {
//Set height
$('.scroller').each(function() {
var height = 0;
$(this).children('div').each(function() {
if (height < $(this).height()) {
height = $(this).height();
}
});
$(this).css("height", height + "px");
});
$('.scroller').each(function() {
var NextArrow = $(this).parent().find('.next');
var PrevArrow = $(this).parent().find('.prev');
// Set a timeout
var timeOut = setTimeout(nextNotice, 5000);
// pause on hover
$(this).hover(
function() {
clearTimeout(timeOut);
}, function() {
timeOut = setTimeout(nextNotice, 5000);
});
// Next notice function called on timeout or click
//set a flag that use to be an oberver to listen when the fadeIn done
var flag = true;
function nextNotice(event) {
var CurrentScrollerDiv = $(this).parent().find('.scroller');
if (!flag) {
return false;
}
clearTimeout(timeOut);
flag = false;
timeOut = setTimeout(nextNotice, 5000);
if ($(CurrentScrollerDiv + ' div:visible').is(CurrentScrollerDiv + ' div:last-child')) {
$(CurrentScrollerDiv + ' div:visible').fadeOut(300);
$(CurrentScrollerDiv + ' div:first-child').fadeIn("slow", function() {
flag = true;
});
} else {
$(CurrentScrollerDiv + ' div:visible').fadeOut(300).next('div').fadeIn("slow", function() {
flag = true;
});
}
return false;
}
$(NextArrow).click(nextNotice);
$(PrevArrow).click(function(event) {
var CurrentScrollerDiv = $(this).parent().find('.scroller');
if (flag) {
return false;
}
clearTimeout(timeOut);
flag = false;
timeOut = setTimeout(nextNotice, 5000);
if ($(CurrentScrollerDiv + ' div:visible').is(CurrentScrollerDiv + ' div:first-child')) {
$(CurrentScrollerDiv + ' div:visible').fadeOut(300);
$(CurrentScrollerDiv + ' div:last-child').fadeIn("slow", function() {
flag = true;
});
}
else {
$(CurrentScrollerDiv + ' div:visible').fadeOut(300).prev('div').fadeIn("slow", function() {
flag = true;
});
}
return false;
});
});
};
})(jQuery);
$(document).ready(function() {
//Blog
$('.itBlog > div:first-child').show();
//Scroller
$('.scroller').Scroller();
});
答案 0 :(得分:16)
要从现有对象构建选择器,请使用the second parameter of $
:
$('div:visible', CurrentScrollerDiv)
CurrentScrollerDiv.find('div:visible');
CurrentScrollerDiv
不是字符串,因此无法与字符串连接以生成基于字符串的选择器参数。
jQuery( selector, [ context ] ) jQuery( selector, [context] ) <-- you want this one, and jQuery( element ) `selector` is a string jQuery( elementArray ) jQuery( jQuery object ) jQuery() jQuery( html, [ ownerDocument ] ) jQuery( html, [ownerDocument] ) jQuery( html,props ) jQuery( callback ) jQuery( callback )
答案 1 :(得分:3)
这是有问题的一行:
if ($(CurrentScrollerDiv + ' div:visible').is(CurrentScrollerDiv + ' div:last-child')) {
您在CurrentScrollerDiv
上使用字符串连接,.toString()
是变量,这根本不是您想要的。不要尝试字符串连接jQuery对象或DOM元素。改为使用jQuery的.find()
:
if (CurrentScrollerDiv.find('div:visible').is(CurrentScrollerDiv.find('div:last-child')) {
然而,几乎可以肯定有一种更有效的方式来编写if
语句。
答案 2 :(得分:2)
这是错误的选择器:
var CurrentScrollerDiv = $(this).parent().find('.scroller');
$(CurrentScrollerDiv + ' div:visible')
修复
var CurrentScrollerDiv = $(this).parent().find('.scroller');
$('div:visible', CurrentScrollerDiv);