[英]javascript pass element from one function to another
這是一個部分代碼:
function readXmlUsingXPath(i,guid, xpath) {
var xmlDoc = loadXML("gameFeed.aspx?guid=" + guid);
if (xmlDoc == null) { document.getElementById(guid).innerHTML = "UPDATING"; return }
else { };
i.innerHTML = xmlDoc.selectNodes(xpath)[0].text;
}
window.onload = function () {
for (var i = 0; i < document.getElementsByTagName('jackpot').length; i++) {
var guid = document.getElementsByTagName('jackpot')[i].getAttribute('data-g').split('|')[0];
var xpath = document.getElementsByTagName('jackpot')[i].getAttribute('data-g').split('|')[1];
readXmlUsingXPath(document.getElementsByTagName('jackpot')[i],guid, xpath);
}
}
基本上,我想做的是將元素從onload函數傳遞到readXmlUsingXpath函數,以便我可以對其進行更改。 但我收到一個未知的運行時錯誤...
根據要求,一些示例html:
<li>
<a href="/gamepath/"><span>gameTitle</span>
<span><jackpot data-g="<%=game.Guid %>|<%=game.GamingProperties.JackpotFeedXpath %>">UPDATING . . .</jackpot></span>
</a>
</li>
好吧,首先,是的-將getElementsByTagName()
和.getAttribute('data-g').split('|')
的結果緩存到變量中:
var myDataG = MyJackpotElement.getAttribute('data-g').split('|');
然后,由於無論如何都將guid
傳遞給服務器端腳本,因此不必處理HTML源代碼提供的XPath,而是讓服務器腳本在服務器端處理該項目(使用XPath)-這樣它將從XPath表達式中獲取xpath表達式。您正在通過Guid加載的項目:)
使服務器端腳本返回您正在尋找的值 ( gameFeed.aspx?guid=
),而不是將在客戶端進一步處理以找到該值的XML。
根據Denis的建議,代碼重構后是否可以工作?
除了性能受到巨大影響外,您繼續執行getElementsByTagName的方式的一個大問題是,如果集合由於任何原因發生更改,長度可能就不再正確,並且您可能會要求元素9(其中只有8個存在)。
另外,更改元素的innerHTML
可能會使瀏覽器退出。
readXmlUsingXPath
:我已將readXmlUsingXPath
函數的i
參數重命名為jackpot
,這似乎比僅i
更合適。
function readXmlUsingXPath(jackpot, guid, xpath) {
var xmlDoc = loadXML("gameFeed.aspx?guid=" + guid);
if (xmlDoc == null) {
document.getElementById(guid).innerHTML = "UPDATING";
return;
}
var firstNode = xmlDoc.selectNodes(xpath).item(0);
jackpot.innerHTML = firstNode.text;
}
window.onload = function () {
var jackpots = document.getElementsByTagName('jackpot');
for (var i = 0; i < jackpots.length; i++) {
var data = jackpots[i].getAttribute('data-g').split('|'),
guid = data[0],
xpath = data[1];
readXmlUsingXPath(jackpots[i], guid, xpath);
}
}
好的,所以我對代碼進行了一些修改,並使代碼更簡單。
現在它按預期工作了。
function loadXMLDoc(guid,xpath,i) {
var xmlhttp;
if (window.XMLHttpRequest) {xmlhttp = new XMLHttpRequest();}
else {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.async = true;
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
i.innerHTML = xmlhttp.responseXML.selectNodes(xpath)[0].text;
}
}
xmlhttp.open("GET", "gameFeed.aspx?guid=" + guid, true);
xmlhttp.send();
}
var tags = document.getElementsByTagName("pre");
for (var i = 0; i < tags.length; i++) {
var data = tags[i].getAttribute('data-g').split('|'), guid = data[0], xpath = data[1];
loadXMLDoc(guid,xpath,tags[i]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.