Yritin löytää ratkaisua "ongelmaani" kahlaamalla nettisivuja, mutta ohjelmointitaidon puutteen takia en oikein päässyt alkua pidemmälle.
Valitettavasti joudun tällä kertaa ottamaan kysyjän roolin.
Ongelma:
Minulla on XML-tiedosto mallia:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<fruitlist>
<fruitinfo>
<Fruit>Apple</Fruit>
<Energy>207/49</Energy>
<Fiber>2.3</Fiber>
<Sugar>11.8</Sugar>
<Protein>0.4</Protein>
</fruitinfo>
<fruitinfo>
<Fruit>Banana</Fruit>
<Energy>375/88 </Energy>
<Fiber>2.7</Fiber>
<Sugar>20.4</Sugar>
<Protein>1.2</Protein>
</fruitinfo>
<fruitinfo>
<Fruit>Lemon</Fruit>
<Energy>51/12</Energy>
<Fiber>1.8</Fiber>
<Sugar>3.0</Sugar>
<Protein>0</Protein>
</fruitinfo>
<fruitinfo>
<Fruit>Orange</Fruit>
<Energy>198/47</Energy>
<Fiber>1.8</Fiber>
<Sugar>10.6</Sugar>
<Protein>1.0</Protein>
</fruitinfo>Miten saisin tuosta jQueryn selector+autocomplete ominaisuuden avulla tai muun toiminnallisuuden avulla haettua yhden hedelmän tiedot ja tulostettua tiedot.
Esimerkiksi: Kirjoittamalla "oran" niin käyttöliittymä täydentää sanan "Orange".
Ohjelma voi automaattisesti tulostaa tiedot kun yksi päätieto on valittu. (Ei tarvitse erikseen painaa lähetä/submit näppiä)
Hedelmä: _____
Energia: _____
Kuitu: _____
Sokeri: _____
Proteiini: _____
Tarkoitus olisi, että sivustoa voisi käyttää kännykän nettiselaimen avulla.
Löysin myös jonkun jQueryä vastaavan, joka olisi varsinaisesti mobiiliympäristöön suunnattu.
http://dojotoolkit.org/
@@@@@@@
Tämä vaikuttaa perushommalta, josta voisi kirjoittaa koodivinkin.
Aihealueet:
- jQueryn käyttö XML-tiedostojen kanssa
- jQueryn avulla valitun tiedon tulostaminen
- Autocomplete
Kiitos vastauksista.
Moi JoukoP!
Tässä jutska, joka toimii IE:ssä ilman jQuery-kamaa...
testi.html:
<html><head></head>
<script language="JavaScript" src="jscript.js">
</script><body>
<input id="text1" type="text"/>
<input id="button1" type="button" value="search"
onclick="ReadXML('fruits.xml',text1.value);"/>
</body></html>jscript.js:
var xmlDocument;
var search;
function ReadXML(url, str)
{
if (str == "")
{
alert("ei hakusanaa");
document.getElementById('text1').focus();
return;
}
var xml = document.createElement("xml");
xml.src = url; search = str;
document.body.appendChild(xml);
xmlDocument = xml.XMLDocument;
WriteXML(); search = null;
xmlDocument = null;
document.body.removeChild(xml);
}
function WriteXML()
{
try
{
var fruitsArray = xmlDocument.getElementsByTagName('fruitinfo');
if (fruitsArray.length > 0)
{
var content = "";
for(i=0;i<fruitsArray.length;i++)
{
if (fruitsArray[i].firstChild.text.indexOf(search) > -1)
{
document.getElementById('text1').value = fruitsArray[i].firstChild.text;
for(j=0;j<fruitsArray[i].childNodes.length; j++)
{
content += fruitsArray[i].childNodes[j].nodeName + ": ";
content += fruitsArray[i].childNodes[j].text + "\r\n";
}
content += "\r\n\r\n";
}
}
if (content == "")
{
content = "not found!"
}
alert(content);
}
document.getElementById('text1').value = "";
}
catch(err)
{
setTimeout('WriteXML()', 200)
}
}fruits.xml:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<fruitlist>
<fruitinfo>
<Fruit>Apple</Fruit>
<Energy>207/49</Energy>
<Fiber>2.3</Fiber>
<Sugar>11.8</Sugar>
<Protein>0.4</Protein>
</fruitinfo>
<fruitinfo>
<Fruit>Banana</Fruit>
<Energy>375/88 </Energy>
<Fiber>2.7</Fiber>
<Sugar>20.4</Sugar>
<Protein>1.2</Protein>
</fruitinfo>
<fruitinfo>
<Fruit>Lemon</Fruit>
<Energy>51/12</Energy>
<Fiber>1.8</Fiber>
<Sugar>3.0</Sugar>
<Protein>0</Protein>
</fruitinfo>
<fruitinfo>
<Fruit>Orange</Fruit>
<Energy>198/47</Energy>
<Fiber>1.8</Fiber>
<Sugar>10.6</Sugar>
<Protein>1.0</Protein>
</fruitinfo>
</fruitlist>testi (eka kerralla nappia voi joutua painamaan kahdesti)
testi2
Moi taas JoukoP!
jutska toimii ehkä paremmin seuraavin muutoksin...
testi.html:
<html><head></head>
<script language="JavaScript" src="jscript.js">
</script><body onload="GetXML('fruits.xml');">
<input id="text1" type="text" onkeyup="ReadXML(text1.value);"/>
</body></html>script.js:
var fruitsArray;
function GetXML(url)
{
var xml = document.createElement("xml");
xml.src = url
document.body.appendChild(xml);
xmlDocument = xml.XMLDocument;
fruitsArray = xmlDocument.getElementsByTagName('fruitinfo');
document.body.removeChild(xml);
xmlDocument = null;
}
function ReadXML(search)
{
if (search.length < 3){return;}
if (fruitsArray.length > 0)
{
var content = "";
for(i=0;i<fruitsArray.length;i++)
{
if (fruitsArray[i].firstChild.text.indexOf(search) > -1)
{
document.getElementById('text1').value = fruitsArray[i].firstChild.text;
for(j=0;j<fruitsArray[i].childNodes.length; j++)
{
content += fruitsArray[i].childNodes[j].nodeName + ": ";
content += fruitsArray[i].childNodes[j].text + "\r\n";
}
content += "\r\n\r\n";
}
}
if (content != "")
{
alert(content);
}
}
}Kiitos oikein paljon.
Viikonloppuna täytyy kokeilla miten onnistuu.
Tuo jQuery UI:n demo ei välttämättä aloittelevalle kaikessa tiiviydessään aukene, joten sepostelin asiasta auki puretun ja kommentoidun koodivinkin XML-haun täydentäminen jQueryllä, johon tungin hieman löpinää myös HTML5:stä ja webbisivujen optimoinnista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.