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”(在本例中为 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
<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>");

        }
    }   
}

im in a total mess. im using an IF to pick only one project, this works. I want only the images from this project. the above code is getting all the images in the xml file (13 of them), i want ONLY the images from the current project (the project corresponding to 'folder' or 'projectname'). I cant do this :(

于 2012-10-14T19:07:07.083 回答
0

哇。好的。就在这里:

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 回答
-1

你有一个图像数组,你想用 js 渲染。有几种方法。您在问题中的示例代码可能是最糟糕的方法。

不要使用 document.write() 来执行此操作。

所有示例都假定“图像”是一个包含 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 回答