【发布时间】:2013-09-04 01:46:34
【问题描述】:
我想知道是否可以将 HTML 对象的属性值设置为包含# 字符的字符串?
我想这样做的原因是页面会有很多项目应该滚动页面到指定的元素,我想存储数据'它应该滚动到哪个项目? ' 作为数据滚动属性。
所以我的 JavaScript 代码将如下所示:
function ScrollToElement(lm)
{
var theTop = lm.offset().top;
$("html,body").animate({
scrollTop: theTop/*,
scrollLeft: 1000*/
});
}
// .. and add click event to all such objects :
$('.scroller').click(function(){
var theSelector = $(this).attr('data-scrollto');
ScrollToElement($(theSelector));
});
所以 html 元素看起来像:
<a class='scroller' data-scrollto='p#p-to-scroll'>Click to scroll to p</a>
安全吗?
作为一个附带问题,为什么
$(element).data('scrollto');
没用,但是
$(element).attr('data-scrollto');
有效吗?
【问题讨论】:
-
是的,它是安全的。不过可能不是很优雅,因为您将逻辑和演示混为一谈。
-
为什么是
p#p-to-scroll?仅仅#p-to-scroll还不够吗? -
@dystroy 你是对的,我正在为自己创建一个投资组合,我想要一个简单的导航。对我来说,一一添加所有 click() 似乎太多了,我想保持 javascript 不变,同时更改 html 元素。有没有更好的办法?
-
@u_mulder 当然可以,但如果它有效,它可以双向有效,对吧?
-
我支持@dystroy。 . .我建议使用
ScrollToElement($("#" + theSelector));而不是ScrollToElement($(theSelector));,并且让data-scrollto值只是目标元素的id属性。这会将数据与逻辑分开。
标签: javascript jquery html scroll