javascript将元素从一个函数传递到另一个函数

javascript将元素从一个函数传递到另一个函数,javascript,Javascript,这是一个部分代码: 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(

这是一个部分代码:

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);
    }
}
函数readXmlUsingXPath(i,guid,xpath){ var xmlDoc=loadXML(“gameFeed.aspx?guid=“+guid”); 如果(xmlDoc==null){document.getElementById(guid.innerHTML=“updateing”;return} else{}; i、 innerHTML=xmlDoc.selectNodes(xpath)[0]。文本; } window.onload=函数(){ 对于(var i=0;i 基本上,我要做的是将元素从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')的结果缓存到一个变量中

    var myDataG = MyJackpotElement.getAttribute('data-g').split('|');
    
    然后,由于要将
    guid
    传递给服务器端脚本,因此不必处理来自HTML源代码的XPath,而是让服务器脚本在服务器端处理该项(使用XPath),这样它就可以从正在加载的项中获取XPath表达式(通过guid:)


    让服务器端脚本返回您要查找的值(
    gameFeed.aspx?guid=
    ),而不是您将在客户端进一步处理以查找值的XML。

    首先,是-缓存
    getElementsByTagName()
    .getAttribute('data-g').split的结果。
    转换为变量:

    var myDataG = MyJackpotElement.getAttribute('data-g').split('|');
    
    然后,由于要将
    guid
    传递给服务器端脚本,因此不必处理来自HTML源代码的XPath,而是让服务器脚本在服务器端处理该项(使用XPath),这样它就可以从正在加载的项中获取XPath表达式(通过guid:)


    让服务器端脚本返回您要查找的值(
    gameFeed.aspx?guid=
    ),而不是您将在客户端进一步处理以查找值的XML。

    按照Denis的建议重构后,代码是否工作

    您一直执行getElementsByTagName的方式的一个大问题是,即使性能受到巨大影响,如果集合因任何原因发生更改,长度可能不再正确,并且您可能会在仅存在8的情况下请求元素9

    此外,更改元素的
    innerHTML
    可能会关闭浏览器

    旁白:我已将
    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);
        }
    }
    
    函数readXmlUsingXPath(jackpot、guid、xpath){ var xmlDoc=loadXML(“gameFeed.aspx?guid=“+guid”); if(xmlDoc==null){ document.getElementById(guid).innerHTML=“更新”; 返回; } var firstNode=xmlDoc.selectNodes(xpath).item(0); jackpot.innerHTML=firstNode.text; } window.onload=函数(){ var jackpots=document.getElementsByTagName(“jackpot”); 对于(变量i=0;i
    按照丹尼斯的建议重构代码后,代码还能工作吗

    您一直执行getElementsByTagName的方式的一个大问题是,即使性能受到巨大影响,如果集合因任何原因发生更改,长度可能不再正确,并且您可能会在仅存在8的情况下请求元素9

    此外,更改元素的
    innerHTML
    可能会关闭浏览器

    旁白:我已将
    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);
        }
    }
    
    函数readXmlUsingXPath(jackpot、guid、xpath){ var xmlDoc=loadXML(“gameFeed.aspx?guid=“+guid”); if(xmlDoc==null){ document.getElementById(guid).innerHTML=“更新”; 返回; } var firstNode=xmlDoc.selectNodes(xpath).item(0); jackpot.innerHTML=firstNode.text; } window.onload=函数(){ var jackpots=document.getElementsByTagName(“jackpot”); 对于(变量i=0;i
    好的,所以我稍微修改了代码, 使它更简单

    现在,它的工作原理与预期相符

    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]);
    }
    
    函数loadXMLDoc(guid、xpath、i){
    var-xmlhttp;
    if(window.XMLHttpRequest){xmlhttp=newxmlhttprequest();}
    else{xmlhttp=newActivexObject(“Microsoft.xmlhttp”);}
    xmlhttp.async=true;
    xmlhttp.onreadystatechange=函数(){
    if(xmlhttp.readyState==4&&xmlhttp.status==200){
    i、 innerHTML=xmlhttp.responseXML.selectNodes(xpath)[0]。文本;
    }
    }
    open(“GET”,“gameFeed.aspx?guid=“+guid,true”);
    xmlhttp.send();
    }
    var tags=document.getElementsByTagName(“pre”);
    对于(var i=0;i
    好的,所以我稍微修改了代码, 使它更简单

    现在,它的工作原理与预期相符

    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]);
    }
    
    函数loadXMLDoc(guid、xpath、i){
    var-xmlhttp;
    if(window.XMLHttpRequest){xmlhttp=newxmlhttprequest();}
    else{xmlhttp=newa