Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用到达的div id更改URL哈希值_Jquery_Css - Fatal编程技术网

Jquery 使用到达的div id更改URL哈希值

Jquery 使用到达的div id更改URL哈希值,jquery,css,Jquery,Css,考虑以下代码段: <div id="container"> <div id="1" class="flag"></div> /* some text */ <div id="2" class="flag"></div> /* some text */ <div id="3" class="flag"></div> /* some text */ <

考虑以下代码段:

<div id="container">
    <div id="1" class="flag"></div> 
    /* some text */

    <div id="2"  class="flag"></div> 
    /* some text */

    <div id="3"  class="flag"></div> 
    /* some text */
</div>

如何更改以使其按需工作?任何片段,关键字或链接将不胜感激

为什么不检查每个
div

$("#container").scroll(function() {
    $('#container > div').each(function() {
        if( $("#container").offset().top > $(this).offset().top ) {
            window.location.hash = this.id;
        }
    });
});

jsFiddle:

这可能不是问题所在,所以我将其作为一条评论发布:在CSS中,
id
值不能以数字开头(在HTML4和更早版本中也不能,HTML5会打开)。由于jQuery使用CSS选择器,并在可能的情况下将它们延迟到浏览器自己的选择器引擎,并且以数字开头的
id
选择器(例如,
#1
)无效,因此我避免使用以数字开头的
id
值。谢谢Crowder。实际上,它正常使用一个数字。这不是我的问题。问题是我不知道到达的div是否可以相应地更改散列值。仅仅因为它有效,并不意味着它有效。好的开发人员遵循规范:)没关系。我明白=)。@Nadj:FWIW,我记得在一些浏览器上看到它失败了。我不能立即回忆起它是自己失败的,还是只有当jQuery将分配出一个更大的选择器(例如,
#1 div span
)的一部分时才失败。(jQuery使用
getElementById
处理
#1
,除非它使用getElementById攻击IE bug,在这种情况下它求助于选择器查询)。好吧,它与第一个div一起工作。奇怪的是,浏览器堆叠在第一个div上,我无法继续滚动到下一个div,怎么了?抱歉,代码没有按我的预期工作。还有一个额外的括号。我用JSFIDLE演示更新了它。它在第一个div上工作,但是在将哈希更改为该div的id之后,浏览器停止滚动。问题在于>操作中,有许多
if
测试如firebug所示发生。还有其他方法吗?那是因为没有像
location.hash
这样的东西。它是window.location.hash。我只是复制了你的代码,以为你这么做是有原因的。其次,scroll事件在scroll上启动。可以说,这是经常发生的事。您可以反转数组并限制对所有div的检查,如下所示:。很可能你仍然不满意,即使它不会减慢最慢的机器的速度,所以你也可以在一段时间内这样做,比如:。当然,当你不滚动时会触发。我只有这些了。
$("#container").scroll(function() {
    $('#container > div').each(function() {
        if( $("#container").offset().top > $(this).offset().top ) {
            window.location.hash = this.id;
        }
    });
});