2014-12-05 88 views
1

我有以下XML結構:爲什麼innerHTML在Android瀏覽器中返回undefined?

<Order> 
    <Mats> 
    <mat> 
     <item size="0.5"> 
     <imgsrc>sometext</imgsrc> 
     <size>sometext</size> 
     <cpu>0</cpu> 
     <cid>4208</cid> 
     <id/> 
     </item> 
    </mat> 
    <mat> 
     <item size="0.5"> 
     <imgsrc>sometext</imgsrc> 
     <size>sometext</size> 
     <cpu>0</cpu> 
     <cid>4208</cid> 
     <id/> 
     </item> 
    </mat> 
    <mat> 
     <item size="0.5"> 
     <imgsrc>sometext</imgsrc> 
     <size>sometext</size> 
     <cpu>0</cpu> 
     <cid>4208</cid> 
     <id/> 
     </item> 
    </mat> 
    <mat> 
     <item size="0.5"> 
     <imgsrc>sometext</imgsrc> 
     <size>sometext</size> 
     <cpu>0</cpu> 
     <cid>4208</cid> 
     <id/> 
     </item> 
    </mat> 
    </Mats> 
</Order> 

這是我的javascript代碼:

mattes_number_layers = 4; 
var parser = new DOMParser(); //create a new DOMParser 
var doc = parser.parseFromString(mattes_get_mattes_xml(), "application/xml"); //convert the string to xml 
var top_layer_xml = "<mat>" + doc.getElementsByTagName('mat')[(mattes_number_layers - 2)].innerHTML + "</mat>"; //gets the data for the top layer 
alert(top_layer_xml); 

mattes_get_mattes_xml() =

<Mats selected_type="" selected_design=""><mat><item size="0"><imgsrc>11852997eab43ff5c7b1803692bee608</imgsrc><size>0</size><cpu>20</cpu><cid>4208</cid><id/></item><fillet index="0"/></mat><mat><item size="0.5"><imgsrc>579767cea6941301e6f91d43580a1948</imgsrc><size>0.5</size><cpu>0</cpu><cid>4390</cid><id/></item><fillet index="1"/></mat><mat><item size="0.5"><imgsrc>11852997eab43ff5c7b1803692bee608</imgsrc><size>0.5</size><cpu>0</cpu><cid>4208</cid><id/></item><fillet index="3"/></mat></Mats> 

在Chrome中,警報結果:

<mat><item size="0.5"><imgsrc>sometext</imgsrc><size>0.5</size><cpu>0</cpu><cid>4208</cid><id/></item></mat> 

在使用Android平板電腦的默認瀏覽器(默認瀏覽器的Android 4.1.1模型威望7G):

<mat>undefined</mat> 

回答

1

我換成.innerHTML與我創建了一個功能:

function common_get_inner_html(element) 
{ 
    //console.log(element); 
    element = element.childNodes; 

    var xml_serializer = new XMLSerializer(); 
    var inner_html = ""; 
    //console.log(element.length); 
    for (i = 0; i < element.length; ++i) 
    { 
    //console.log(element[i]); 
    inner_html += xml_serializer.serializeToString(element[i]); 
    } 
    //console.log("inner_html: " + inner_html); 
    return inner_html; 
} 

,並要求它像這樣的:

var top_layer_xml = "<mat>" + common_get_inner_html(doc.getElementsByTagName('mat')[(mattes_number_layers - 2)]) + "</mat>"; //gets the data for the top layer 

然後設置的innerHTML我這樣做:

function common_set_inner_html(element, xml_array) 
{ 
    while (element.firstChild) 
    { 
    element.removeChild(element.firstChild); 
    } 

    var parser = new DOMParser(); //create a new DOMParser 
    for (i = 0; i < xml_array.length; i++) 
    { 
    var doc = parser.parseFromString(xml_array[i], "application/xml"); //convert the string to xml 
    element.appendChild(element.ownerDocument.importNode(doc.documentElement, true)); 
    } 
    return element; 
} 

,並要求它像這樣:

common_set_inner_html(doc.getElementsByTagName('mat')[(mattes_number_layers - 2)], new Array("<item size='" + size/ppi + "'><imgsrc>" + mattes_replace_default_matte_source($(el).find("imgsrc").first().text()) + "</imgsrc><size>" + size/ppi + "</size><cpu>" + cpu + "</cpu><cid>" + cid + "</cid><id/></item>", "<fillet index='" + (mattes_number_layers - 2) + "'></fillet>")); //puts the last added layer into the xml 

然後添加的最後一個元素:

function common_append_node(element, xml_string) 
{ 
    var parser = new DOMParser(); //create a new DOMParser 
    var doc = parser.parseFromString(xml_string, "application/xml"); //convert the string to xml 
    element.appendChild(element.ownerDocument.importNode(doc.documentElement, true)); 
    return element; 
} 

和我把它叫做是這樣的:

​​
相關問題