0

Javascript で独自の getElementById() 関数を実装しようとしています。私のアイデア/アルゴリズムは次のようになります。

function myGetElemById(id){
    // rootNode I suppose will be the BODY tag.
    rootElem = get elements by TAGNAME (rootNode);
    elems = rootElems.getChildren();
    for(i=0; i<elems.length; i++){
        if(!elems[i].hasChildren()){
            myGetElemById(elems[i]);
        } else {
          if(elems[i].id == id)
              return elems[i];
          else
              return null;  
        }
    }
}
4

4 に答える 4

2

方法 1:

function myGetElemById(id){
  return document.getElementById(id);
}

方法 2:

function myGetElemById(id){
  return window[id];
}

方法 3: (新しいブラウザー)

function myGetElemById(id){
  return document.querySelectorAll('#' + id);
}

終わり!

さて、真剣に:

function getById(id, parent, list){
  parent = parent || document.body;
  list   = list   || [];

  var l, child, children = parent.children;

  if(children){
    l = children.length;
    while(l--){
      child = children[l];
      if(child.id == id) list.push(child);
      getById(id, child, list);
    }
  }

  return list;
}
于 2013-01-25T09:09:51.030 に答える
1

最初に、子を持つ要素を処理し、myGetElemById() を呼び出して、結果に応じて戻るかどうかを選択する必要があります。このような

    ...
    if(!elems[i].hasChildren()){
        var result = myGetElemById(elems[i]);
        if (result != null)
            return result;
    } else {
    ...

第二に、なぜdomのすべての要素を反復するのですか? ネイティブ関数ははるかに高速です。

于 2013-01-25T09:10:50.200 に答える
1

この機能をチェックすると、アイデアが得られるかもしれません

function getElementsStartsWithId( id ) {
  var children = document.body.getElementsByTagName('*');
  var elements = [], child;
  for (var i = 0, length = children.length; i < length; i++) {
    child = children[i];
    if (child.id.substr(0, id.length) == id)
      elements.push(child);
  }
  return elements;
}
于 2013-01-25T09:10:30.513 に答える