4

我想知道是否可以将 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'); 

有效吗?

4

2 回答 2

3

根据 W3C 规范,是的,使用字符 ( ) 和字符 ( )安全的。U+0023 NUMBER SIGN#U+002E FULL STOP.

属性名称,后跟零个或多个空格字符,后跟单个U+003D EQUALS SIGN字符,后跟零个或多个空格字符,然后是属性值,除了上述对属性值的要求外,该属性值不得包含任何文字空格字符、任何U+0022 QUOTATION MARK字符 ( ")、U+0027 APOSTROPHE字符 ( ')、U+003D EQUALS SIGN字符 ( =)、U+003C LESS-THAN SIGN字符 ( <)、U+003E GREATER-THAN SIGN字符 ( >) 或U+0060 GRAVE ACCENT字符 (`),并且不能是空字符串

阅读http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#attributes-0

于 2013-09-03T17:40:50.683 回答
0

是的,您可以存储哈希#.数据属性。您应该使用正确的数据方法。 http://api.jquery.com/jQuery.data/

var theSelector = $(this).data('scrollto');

如果您似乎无法使用 data 方法,请检查您使用的 jQuery 版本,它是在 1.2.3 版本中引入的

于 2013-09-03T17:07:39.620 回答