0
for (m=0;m<z;m++) {
    document.write("<img src=" + image1 + '>' + "<br>");
}

PHPを介してXMLファイルから画像のURLのリストを正常に取得しています。
var'image1'は'image_1.png'を返します。

上記のループでは、これらの画像を出力したいと思います。上記の「image1」は「image_1.png」を2回表示します(この場合はz = 2)が、すべての画像のリストを探しています。'image [m]'のようなものを入れたいのですが、それは正しくありません。

誰かがこれまでこの質問をしたことがないのなら、私は驚きます。私は検索しましたが、答えを見つけることができませんでした。

これは私のXMLデータを取得しているPHPです:

<script type="text/javascript">
// code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();
}
// code for IE6, IE5
else {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET","../../file.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 

var x=xmlDoc.getElementsByTagName("project")
var j=xmlDoc.getElementsByTagName("imagelist");
for (i=0;i<x.length;i++) { 

    for (z=0;z<j.length;z++) {
        this["image" + z] = j[z].getElementsByTagName("image")[z].childNodes[0].nodeValue
    }
}

4

3 に答える 3

0

うわあ。Ok。これはここにあります:

this["image" + z] = j[z].getElementsByTagName("image")[z].childNodes[0].nodeValue

そうしないでください。

これは、グローバルスコープで変数を動的に作成しています。それがなぜであるかを説明することはできますが(これthisはグローバルオブジェクトであり、グローバルオブジェクトのプロパティ自体はグローバル変数です)、初心者のJSプログラマーにとっては、一般的にはかなり悪いので、絶対にやるべきではないと言うだけで十分でしょう。アイディア。

代わりに、本当に必要なのは配列です。

var images = [];
for (i=0;i<x.length;i++) { 
  for (z=0;z<j.length;z++) {
    images.push(j[z].getElementsByTagName("image")[z].childNodes[0].nodeValue);
  }
}

これで、後でループするのは非常に簡単です。ループインデックスを配列インデックスとして使用するだけで、必要な値をフェッチできます。

for (m=0;m<z;m++) {
  document.write('<img src="'+ images[m] +'"><br>');
}
于 2012-10-13T23:04:17.160 に答える
0
<script type="text/javascript">
// code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();
}
// code for IE6, IE5
else {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET","../../designportfolio.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 

var projectname = "<?= $name ?>";
var x=xmlDoc.getElementsByTagName("project")
var j=xmlDoc.getElementsByTagName("imagelist");
var k=xmlDoc.getElementsByTagName("image");

for (i=0;i<x.length;i++) { 

    //vars from xml used to display data in html
    var folder = x[i].getElementsByTagName("folder")[0].childNodes[0].nodeValue;

    //only defines the data if the projectname and folder name match
    if (folder == projectname) {
        var projecttitle = x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
        var projectinfo_l = x[i].getElementsByTagName("projectinfo_l")[0].childNodes[0].nodeValue;
        var skillsused = x[i].getElementsByTagName("skillsused")[0].childNodes[0].nodeValue;
        var date = x[i].getElementsByTagName("date")[0].childNodes[0].nodeValue;
        var videoURL = x[i].getElementsByTagName("videoURL")[0].childNodes[0].nodeValue;

        var images = [];
        for (z=0;z<k.length;z++) {
            images.push(x[i].getElementsByTagName("image")[0].childNodes[0].nodeValue);
            document.write("images " + images + "<br>");

        }
    }   
}

私は完全に混乱しています。IFを使用して1つのプロジェクトのみを選択すると、これは機能します。このプロジェクトの画像のみが必要です。上記のコードは、xml ファイル (13 個) 内のすべての画像を取得しています。現在のプロジェクト (「フォルダー」または「プロジェクト名」に対応するプロジェクト) の画像のみが必要です。私はこれを行うことはできません:(

于 2012-10-14T19:07:07.083 に答える
-1

jsでレンダリングしたい画像の配列があります。いくつかのアプローチがあります。あなたが質問に持っているサンプルコードはおそらくそれをするための最悪の方法です。

これを行うためにdocument.write()を使用しないでください。

すべての例では、「images」がn個の画像URLを含む配列であると想定しています。

例1

var images = [],
    target = document.getElementById('target_div'); //this is the location in the document where the images are appended to

for(var i=0, len=images.length; i++){
    var img = document.createElement('img');
    img.src = images[i];
    target.appendChild(img);
}

例2

var images = [],
    target = document.getElementById('target_div'); //this is the location in the document 

var arr = [];
for(var i=0, len=images.length; i++){
    arr.push('<img src="'+ images[i] +'">');
}
target.innerHTML = arr.join('');
于 2012-10-13T23:02:09.683 に答える