【发布时间】:2020-02-13 16:57:04
【问题描述】:
我正在尝试找出为什么会发生以下情况。
我正在尝试:
单击一个元素。
点击时,将 DOM 元素传递给函数。
在函数中使用此 DOM 元素来创建目标 ID。
平滑滚动到此目标 ID>
这是我的代码:
变量:
var productListQueryResult = $('#product-list-query-result');
触发:
scrollToDiv(productListQueryResult);
功能:
// TO TOP OF ELEMENT
function scrollToDiv(e) {
var el = e.attr('id');
$('html, body').animate({
scrollTop: $("#" + el).offset().top
}, 300);
console.log(el);
}
// END TO TOP OF ELEMENT
结果:
jquery.js?ver=1.12.4-wp:2 Uncaught Error: Syntax error, unrecognized expression: '#product-list-query-result'
虽然这个元素是存在的。如果我跑:
var e = jQuery("#product-list-query-result");
console.log(e);
我得到两行返回:
a.fn.init [div#product-list-query-result, context: document, selector: "#product-list-query-result"]
undefined
我不确定为什么我返回的第二行太“未定义”,谁能解释一下?
希望我已经提供了足够的信息,如果没有,请随时开始讨论。
编辑
我也试过了:
触发:
scrollToDiv(productListQueryResult.attr('id'));
功能:
// TO TOP OF ELEMENT
function scrollToDiv(e) {
var el = "'#" + e + "'";
$('html, body').animate({
scrollTop: $(el).offset().top
}, 300);
console.log(el);
}
// END TO TOP OF ELEMENT
结果:
Uncaught Error: Syntax error, unrecognized expression: '#product-list-query-result'
编辑(解决方案):
如果将变量传递给选择器,则不需要“”。
功能:
// TO TOP OF ELEMENT
function scrollToDiv(e) {
var el = "#" + e;
$('html, body').animate({
scrollTop: $(el).offset().top
}, 300);
console.log(el);
}
// END TO TOP OF ELEMENT
我仍然很困惑为什么第一次尝试没有成功,为什么简单的测试返回了一个未定义的行?
【问题讨论】:
-
你得到
unrecognized expression: '#product-list-query-result'的错误很奇怪......可能是你正在使用另一个库覆盖$变量,当你调用$('#product-list-query-result');时$它实际上不是jQuery? -
我正在使用 WordPress 已经托管的版本,然后在准备好的函数中分配 $:(function($){})(jQuery);
-
嗯,这很奇怪。您的代码似乎有效。你可以看看这个fiddle它在哪里工作。
-
那个小提琴不加载任何 JS。不过我相信你,这就是我写它的原因 xD 如果你对这个话题有任何启示,请反馈!
-
是的,我忘了保存它:face_palm。在我写的答案中,我更新了它并且它正在工作,虽然:)