簡體   English   中英

javascript將元素從一個函數傳遞到另一個函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM