Javascript 使用变量指定jquery选择器
我无法使Javascript 使用变量指定jquery选择器,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我无法使$(目标)工作 如果我单击带有href=#top的链接,则警报(目标)显示#top,但$(目标)。偏移量返回空值 $("[href^='#']").click( function() { var target = $(this).attr('href'); alert(target); $("#body-wrapper").animate( {scrollTop: $(target).offset().top} ,300); return false
$(目标)
工作
如果我单击带有href=#top
的链接,则警报(目标)
显示#top,但$(目标)。偏移量
返回空值
$("[href^='#']").click( function() {
var target = $(this).attr('href');
alert(target);
$("#body-wrapper").animate( {scrollTop: $(target).offset().top} ,300);
return false
})
};
使用$(this).offset()
。您的target
var只是一个字符串,而不是jQuery对象或DOM节点。可能是页面上不存在的元素#top
。尝试提醒$(目标).length
并查看您得到了什么。当您这样做时:
$(target).offset()
你基本上在做:
$("#top").offset()
但是,您的页面中显然没有ID为“top”的对象(因此它返回null)。因此,如果您将链接命名为top,则这可能会起作用,该ID也如下所示:
<a name="top" id="top"></a>
在这里,您查找一个名为class='top'属性的标记。他将
target
包装在$()
中,因此它应该与执行$('#top')
相同。OP没有将target
用作jquery对象。他正在做$(target)
。在他的代码中,target
是一个字符串(#top”),而帖子并没有说他还有一个id=“top”的HTML元素。我假设他正在查找链接本身的偏移量。我假设您的页面上有一个元素,您正在尝试检索该元素的偏移量?另外,请检查是否使用数据元素而不是“href”。href属性应该保留为真正的HTML超链接。只是说,在评论中提问可能比盲目猜测问题更容易。@jfriend00-WOW!我从来没想过——就是这样。注意。@jfriend00-这是否意味着这个帖子应该被删除,因为这个问题无关紧要?@Alien Robert-我不确定你认为应该删除什么。我能够理解你在你的问题中做了什么(我做了一些编辑才把它弄对),现在你得到了答案。我认为这里没有什么可以删除的。@jfriend00-Fair。我仍然在想,是否有任何方法可以更新帖子,以便有我问题的人可以在中找到它-但是如果他们像我一样健忘,我想那将无法达到目的。
target = target.slice(1); // remove # from start of the name
$("[name='" + target + "']").offset() // construct $("[name='top']");