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']");