カスタム JavaScript ライブラリ用のカスタム CSS セレクター エンジン関数を次のように作成しました。
var catchEl = function(el) { // Catching elements by identifying the first character of a string
var firstChar = el[0],
actualNode = el.substring(1, el.length),
elements,
tempElems = [];
if (!document.querySelectorAll) {
try{
if(firstChar === "#") {//So, we can look for ids
tempElems.push(document.getElementById(actualNode));
} else if(firstChar === ".") {//or classes
elements = document.getElementsByClassName(actualNode);
for(i=0;i<elements.length;i++) tempElems.push(elements[i]);
} else {//or tags
elements = document.getElementsByTagName(el);
for(i=0;i<elements.length;i++) tempElems.push(elements[i]);
}
} catch(e) {};
} else {//but before everything we must check if the best function is available
try{
elements = document.querySelectorAll(el);
for(i=0;i<elements.length;i++) tempElems.push(elements[i]);
} catch(e) {};
}
return tempElems;
}
この関数は要素の配列を返します。window
しかし、頭をひっくり返して、 、document
またはオブジェクトも返すことができるように、より柔軟にしようとしましthis
たが、失敗しました。オブジェクトを配列に入れようとするとpush
、配列はまだ空です。window
tempElems
したがって、文字列が渡されたときにこの関数が要素の配列を返すようにする方法、または必要に応じてそれぞれのオブジェクト ( window
、document
またはthis
) を返す方法を知りたいです。
注: jQuery を使用したくありません。したがって、jQuery に関する回答は投稿しないでください。