Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.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
Javascript n如果您只关心正在单击的子单项元素,而不关心其“ID”是什么,则这些单项容器的顺序将保持静态,并且您可以安全地假定这些位置是有效ID。另一种情况是,如果在对象数组中有单个项数据,这些数据被洗牌,然后用于在用户启动的排序上构建和替换HTML,这些排序总是将HTML的顺序和其他数据跟踪依赖项联系起来_Javascript_Html_Css - Fatal编程技术网

Javascript n如果您只关心正在单击的子单项元素,而不关心其“ID”是什么,则这些单项容器的顺序将保持静态,并且您可以安全地假定这些位置是有效ID。另一种情况是,如果在对象数组中有单个项数据,这些数据被洗牌,然后用于在用户启动的排序上构建和替换HTML,这些排序总是将HTML的顺序和其他数据跟踪依赖项联系起来

Javascript n如果您只关心正在单击的子单项元素,而不关心其“ID”是什么,则这些单项容器的顺序将保持静态,并且您可以安全地假定这些位置是有效ID。另一种情况是,如果在对象数组中有单个项数据,这些数据被洗牌,然后用于在用户启动的排序上构建和替换HTML,这些排序总是将HTML的顺序和其他数据跟踪依赖项联系起来,javascript,html,css,Javascript,Html,Css,非Jquery方法(未经测试): 你真的可以给我加分,尤普似乎有很多。刚定了一笔赏金;-)即使在不同窗口的同一个浏览器(Chrome)中,我也做了测试,得到了非常复杂的结果(尽管测试可能不太好)。解析HTML可能需要花费大部分时间,因此每个元素都有相同数量的属性,但结果是相同的。我认为在性能方面(比如建立索引等),这真的没有什么区别。@FelixKling很有趣,谢谢你把测试放在一起;在我这边(Chrome 20和Firefox 14),看起来没有id的版本稍微(非常)快一些。我喜欢“观察到的性

非Jquery方法(未经测试):


你真的可以给我加分,尤普似乎有很多。刚定了一笔赏金;-)即使在不同窗口的同一个浏览器(Chrome)中,我也做了测试,得到了非常复杂的结果(尽管测试可能不太好)。解析HTML可能需要花费大部分时间,因此每个元素都有相同数量的属性,但结果是相同的。我认为在性能方面(比如建立索引等),这真的没有什么区别。@FelixKling很有趣,谢谢你把测试放在一起;在我这边(Chrome 20和Firefox 14),看起来没有id的版本稍微(非常)快一些。我喜欢“观察到的性能”这个词,我完全是在偷它。投票结果如下:(回答得很好,谢谢。我希望我能得到一些Chrome或Mozilla开发人员的支持,并就这如何不会影响现代浏览器的性能发表一个冗长的技术性回答,但我想这不会发生:-)@Mahn:嗯,每个人中至少有一个人会偶尔来看看。如果你运气好的话……根据页面的排列方式/每个项目有多少html内容以及其他因素,为数百个项目循环和分配ID在回流页面上可能会变得非常难看。@Erik Reppen:听起来很恶心。我现在已经从我的答案中删除了这一点。jQuery代码在性能方面是非常有问题的。如果该类中有数百个元素,那么应该使用。这与节省id属性以节省带宽有些矛盾,然后包括4000行库作为替代。可能按id选择它们仍然比使用jQuery的eq更快,不是吗?@Mahn-是的,但是再次,我认为性能的提高不足以证明需要花费时间来添加每个
id
属性。另外,删除
id
属性会减少文件大小。我几乎同意你写的所有内容,你有我的投票权,但我必须诚实地说,我特别想知道如果在我发布问题时在服务器端生成id,浏览器会如何反应,其中@BoltClock更直接地涵盖了这一点。但我也会接受你的回答,我可以接受两次,没问题。我们感谢你的支持。我已经学会接受做TLDR女仆而不是新娘。
<div id="stuffContainer" class="item-container">
    <div class="single-item"></div>
    <div class="single-item"></div>
    <div class="single-item"></div>
    <div class="single-item"></div>
    <div class="single-item"></div>
    <div class="single-item"></div>
    [...]
</div>
$('.single-item').eq(3);
$('.single-item').click(function()
{
    var yourClickedDiv = $(this);
    // execute the rest of your code here
});
var myContainer = document.getElementById('stuffContainer');
//ignore following indent goof

    myContainer.addEventListener('click', function(e){
        var
            singleItem,
            elementOriginallyClicked = singleItem = e.target,
            stuffContainer = this;

        //anything clicked inside myContainer will trigger a click event on myContainer
        //the original element clicked is e.target
        //google 'event bubbling javascript' or 'event delegation javascript' for more info

        //climb parentNodes until we get to a single-item node
        //unless it's already single-item that was originally clicked
        while( !singleItem.className.match(/[=\s'"]single-item[\s'"]/g) ){
            singleItem = singleItem.parentNode;
        }

        //You now have a reference to the element you care about

        //If you want the index:

        //Get the singleItem's parent's childNodes collection and convert to array
        //then use indexOf (MDN has normalizer for IE<=8) to get the index of the single-item

        var childArray = Array.prototype.slice.apply(stuffContainer.childNodes,[0]),
        thisIndex = childArray.indexOf(singleItem);

        doSomethingWithIndex(thisIndex);
        //or 
        //doSomethingWithDOMObject(singleItem);

    } );
$('#someContainer').on('click','.single-item', function(){
    var $_singleItem = $(this), //jq handles the bubble to the interesting node for you
    thisIndex = $_singleItem.index(); //also getting index relative to parent

    doSomethingWithIndex(thisIndex);
    //or
    //doSomethingWithJQObject($_thisItem);
} );