首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据具有元素id的数组对元素布局进行重新排序

根据具有元素id的数组对元素布局进行重新排序
EN

Stack Overflow用户
提问于 2011-07-06 09:02:27
回答 1查看 251关注 0票数 0

我需要执行以下任务:有两个'ul‘元素包含一些具有唯一id的'li’。

代码语言:javascript
复制
    <div id="sr">
        <ul id="li-fav">
            <li id="app-1">a</li>
            <li id="app-2">b</li>
            <li id="app-3">c</li>
        </ul>
        <ul id="li-rest">
            <li id="app-4">d</li>
            <li id="app-5">e</li>
            <li id="app-6">f</li>            
        </ul>
    </div>

使用getElementsOrder函数,我得到了包含多个id个元素的结果数组:

代码语言:javascript
复制
function getElementsOrder(){
    var f, r,
    fLi = [], rLi = [];

    f = document.getElementById('apps-fav').childElementNodes;
    console.log(f);
    for(var i=0, l=f.length; i<l; i+=1){
        fLi.push(f[i].id.split('-')[1]);
    }
    r = document.getElementById('apps-rest').childElementNodes;
    for(i=0, l=r.length; i<l; i+=1){
        rLis.push(r[i].id.split('-')[1]);
    }

    return {'fav': fLi, 'rest': rLi};
}

// {'fav': [1, 2, 3], 'rest': [4, 5, 6]}

现在,我希望在从不同排序的数组中读取数据时,能够对两个ul中的li元素进行重新排序,即:

代码语言:javascript
复制
//{'fav': [3, 4, 1], 'rest': [2, 5, 6]}

如何在浏览器最友好的方式下做到这一点?使用document fragment?这些步骤应该是什么?我有jsfiddle上的示例:

http://jsfiddle.net/PTx3f/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-06 09:12:32

您可以沿着以下行移动li元素:

代码语言:javascript
复制
var favs = obj.fav;  // where obj is the object returned by getElementsOrder() 
var i = favs.length;
var ul = document.getElementById('li-fav');

while (i--) {
  ul.insertBefore(document.getElementById('app-' + favs[i]), ul.firstChild);  
}

var rest = obj.rest;
i = rest.length;
ul = document.getElementById('li-rest');

while (i--) {
  ul.insertBefore(document.getElementById('app-' + rest[i]), ul.firstChild);  
}

请注意递减计数,以便使用insertBefore以正确的顺序结束元素。代码应该进行重构,以消除逻辑上的重复。

编辑-重构

代码语言:javascript
复制
function doStuff() {
  var i, ids, list, ul; 

  for (list in obj) {

    if (obj.hasOwnProperty(list)) {
      ids = obj[list];  
      i = ids.length;
      ul = document.getElementById('li-' + list);

      while (i--) {
        ul.insertBefore(document.getElementById('app-' + ids[i]), ul.firstChild);  
      }
    }
  }
}

添加了hasOwnProperty测试以防止继承的可枚举属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6590522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档