Salut,
Je te propose de mettre ces quelques lignes dans le premier script js que tu load dans ta page :
if(!document.getElementById) document.getElementById=function (id) {
return eval("document.all."+id);
}
if(!document.getElementsByName) document.getElementsByName=function (name) {
var el=document.all,result=new Array(),j=0;
for(var i=0;i<el.length;i++) if(el[i].name.toLowerCase()==name.toLowerCase()) result[j++]=el[i];
return result;
}
if(!document.getElementsByTagName) document.getElementsByTagName=function (tagName) {
var el=document.all,result=new Array(),j=0;
for(var i=0;i<el.length;i++) if(el[i].tagName.toLowerCase()==tagName.toLowerCase()) result[j++]=el[i];
return result;
}
Cela va te permettre d'uniformiser les fonctions 'getElementById', 'getElementsByName' et 'getElementByTagName' pour IE et FF (et d'autres navigateur mais ce sont les principaux)
Ensuite pour ce qui est du traitement si j'ai bien compris tu veux prendre dans un tableau tous les éléments qui ont un certain identifiant c'est ça ?
Comme les lignes données ci-dessus uniformisent les traitements selon le navigateur, je pense que tu peux garder uniquement le dernier traitement :
var aEl = document.getElementsByTagName( '*' );
for(var i=0,j=aEl.length;i<j;i+=1){
if(aEl[i].id == sId )
{
outArray.push(aEl[i]);
};
};
Mais tu veux un code qui marche toujours quelque soit le navigateur, tu peux t'appuyer uniquement sur du javascript DOM comme dans cet exemple :
function getElementsById ( _id_ ){
var form = document.forms[0];
// --- Return retrieved elements (can be null)
if ( form )
return elementsRetrieved = getElements(form,_id_);
}
// --- Recursive method to find elements with id equals to the label parameter
// --- in a root element
function getElements ( _obj_, _label_ ){
var objects = new Array();
var tmpObjects = null;
// --- Check if current obj has id equals to the label parameter
// --- If so, add it to the list to return
if ( _obj_.id != null && _obj_.id == _label_ )
objects.push(_obj_);
// --- If current object has children object, roll on these children to search another objects with id equals to the label
if ( _obj_.childNodes ){
for ( var i = 0; i < _obj_.childNodes.length; i++ ){
// --- Retrieve return element list
tmpObjects = getElements(_obj_.childNodes,_label_);
// --- If not null, add it to current list to return
if ( tmpObjects != null ){
for ( var j = 0; j < tmpObjects.length; j++ )
objects.push(tmpObjects[j]);
}
}
}
// --- Finally return the list of retrieved elements
return objects;
}
La méthode 'getElementsById' que tu as essayer de mettre en place devrait mieux fonctionner. Je n'ai pas testé le code donc j'ai peut être fait des erreurs de syntaxe, mais logiquement ça devrait fonctionner.
Si tu as le moindre soucis tu sais où me trouver.
PS: rien ne t'empêche aussi de compléter la méthode pour qu'elle prenne en paramètre un élément à partir duquel commencer le traitement :
function getElementsById ( _id_, _startElementId_ ){
var form = document.getElementById(_startElementId_);
// --- Return retrieved elements (can be null)
if ( form != null )
return elementsRetrieved = getElements(form,_id_);
}
Bon courage pour la suite.
~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~