0

私は初心者です。チェックボックスツリーが存在するアプリケーションがあります。ユーザーがそれらのチェックボックスのいくつかをチェックする前に、チェックボックスに事前入力したい。

そのために、以下に示すように、バックエンド perl スクリプトから XML 形式を取得しています。以下の XML では、0、43、44、45、46、および 50 のみが表示されるため、ページの読み込み時にそれぞれのチェックボックスのみをオンにする必要があります。ページの読み込み時にチェックされたチェックボックスを表示するにはどうすればいいですか .......?

私は非常に多くの例を試しました。しかし、私の問題の解決策が得られていません。以下は、perl スクリプトから取得している XML 形式のデータです。

<perldata> 
<hashref memory_address="0x86f4880"> 
<item key="0">1</item> 
</hashref> 
</perldata> 
<perldata> 
<hashref memory_address="0x86f4880"> 
<item key="43">1</item> 
</hashref>  
</perldata> 
<perldata> 
<hashref memory_address="0x86f4880"> 
<item key="44">1</item> 
</hashref> 
</perldata> 
<perldata> 
<hashref memory_address="0x86f4880"> 
<item key="45">1</item> 
</hashref> 
</perldata> 
<perldata> 
<hashref memory_address="0x86f4880"> 
<item key="46">1</item> 
</hashref>  
</perldata> 
<perldata> 
<hashref memory_address="0x86f4880"> 
<item key="50">1</item> 
</hashref> 
</perldata>
4

1 に答える 1

0

不足している情報はたくさんありますが、私はあなたを助けようとします。XML全体を取得していて、jQueryやその他のライブラリを使用していないことを前提としています。まず、XMLにルートノードがありません。次に、JavaScriptでXMLを解析し、チェックボックスをオンにして次のようにします。

// if you are getting the XML from AJAX call
//var xmlDoc = xmlhttp.responseXML;

// if you are have the XML as String
var xmlStr = '<root><perldata> \
<hashref memory_address="0x86f4880"> \
<item key="0">1</item> \
</hashref> \
</perldata> \
<perldata> \
<hashref memory_address="0x86f4880"> \
<item key="43">1</item> \
</hashref>  \
</perldata> \
<perldata> \
<hashref memory_address="0x86f4880"> \
<item key="44">1</item> \
</hashref> \
</perldata> \
<perldata> \
<hashref memory_address="0x86f4880"> \
<item key="45">1</item> \
</hashref> \
</perldata> \
<perldata> \
<hashref memory_address="0x86f4880"> \
<item key="46">1</item> \
</hashref>  \
</perldata> \
<perldata> \
<hashref memory_address="0x86f4880"> \
<item key="50">1</item> \
</hashref> \
</perldata> \
</root>';
var xmlDoc;
if (window.DOMParser)
{
    var parser=new DOMParser();
    xmlDoc=parser.parseFromString(xmlStr,"text/xml");
}else // Internet Explorer
{
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async=false;
    xmlDoc.loadXML(xmlStr); 
}

// get all the item tags from the XML
var itemTags = xmlDoc.getElementsByTagName("item");
// get all the items to be checked
var inputsToCheck = {}; 
for(var i = 0, len = itemTags.length; i < len; i++) {
    var itemTag = itemTags[i];
    inputsToCheck[itemTag.getAttribute("key")] = true;
}

// loop through the inputs and check the items to be checked
var inputs = document.getElementsByTagName("input");
for(var i = 0, len = inputs.length; i < len; i++) {
    var input = inputs[i];
    if(input.getAttribute("type") == "checkbox" && inputsToCheck[input.getAttribute("name")])
        input.setAttribute("checked", "true");
}
于 2012-10-18T05:54:55.333 に答える