2011-07-24 2 views
0

J'ai un script qui permet de récupérer des suggestions Google (XML) avec Javascript et sortie en HTML:tourner une liste d'options de sélection pour Regulair liste ul

<input id='inp' /> <select id='sug' /> 

<script type='text/javascript'> 

function el(tid) {return document.getElementById(tid);} 

function addScript(u){ 
    var head=document.getElementsByTagName('head')[0], 
    sc2=document.createElement('script'); sc2.src=u;  
    head.appendChild(sc2); 
    setTimeout(function(){ head.removeChild(sc2); sc2=null;}, 20000) 
}//end addScript() 


function suggest(data){ 
    var sel=el("sug").options; sel.length=0; 
    data[1].map(function(a){return a[0];}).map(function(a,b){ 
    sel[b]=new Option(a); 
}); 
sel.size=data[1].length; 
}//end suggeest() 


el("inp").onkeyup=function(){ 
    addScript("http://www.google.nl/complete/search?callback=suggest&q="+this.value); 
} 

Comme vous pouvez voir les données XML est maintenant une liste d'options de sélection. Ma question: Comment puis-je obtenir ceci dans un ul ---> li HTML plutôt que dans la liste des options de sélection.

+1

par la options un create ul – Ibu

+0

Je ne suis pas un expert de JS mais normalement je peux comprendre beaucoup de choses par moi-même. A part ça ... Je peux à peine lire ce qui se passe dans ce script, donc faire quelque chose en boucle ne veut rien dire pour moi ... – Youss

+0

@Youss: Pourriez-vous clarifier ce que vous voulez faire? Si je comprends bien, il y a du XML que vous voulez convertir en balises 'ul' et' li', mais je ne suis pas très sûr de ce que vous voulez dire. – element119

Répondre

1

AFAIK il n'y a pas d'objet DOM standard pour représenter ul/li que votre « OO » façon ne fonctionne pas ... Cependant, à la suite semble fonctionner dans mon navigateur FireFox: dans le corps html ont une liste comme

<ul id='test'> 
    <li>test</li> 
</ul> 

et remplacer dans la fonction JavaScript suggest avec celui-ci

function suggest(data){ 
    var sel=el("test"); sel.innerHTML=''; 
    data[1].map(function(a){return a[0];}).map(function(a,b){ 
    sel.innerHTML += '<li>'+a+'</li>'; 
}); 
} 

BTW ajouter la liste avant l'élément select ou écrire comme

<select id='sug'></select> 
<ul id='test'> 
    <li>test</li> 
</ul> 

(c.-à-sélectionner est writen avec balise de fin appropriée), sinon la liste ne sera pas affiché dans la page

EDIT: version qui semble fonctionner en boucle IE

function suggest(data){ 
    var sel=el("test"); sel.innerHTML=''; 
    for(x=0; x<data[1].length;x++){ 
    sel.innerHTML += '<li>'+data[1][x][0]+'</li>'; 
    } 
} 
+0

J'espère un jour avoir le temps d'apprendre JS. Mais pour l'instant MERCI beaucoup :) Cela signifie beaucoup pour moi puisque c'est la dernière chose dont j'avais besoin pour compléter mon site web. – Youss

+0

Il ne fonctionne pas dans IE8, ce qui me donne une erreur à 'data [1] .map' etc. Avez-vous une idée pourquoi c'est? – Youss

+0

J'ai testé votre code original avec IE6 et il ne fonctionnera pas non plus - il ressemble à l'objet tableau dans IE ne supporte pas la fonction «map»? Peut-être que réécrire la fonction 'suggérer 'avec une boucle manuelle du tableau fonctionnera? Désolé, je ne suis pas JS/HTML mec moi donc je ne suis pas très sûr de ce que le problème est ... – ain

Questions connexes