【问题标题】:Javascript array contain valueJavascript数组包含值
【发布时间】:2012-01-09 10:56:17
【问题描述】:
<div id="image_div">
<input type="checkbox" />
<img src="1.jpg" />
<input type="checkbox" />
<img src="2.jpg" />
<input type="checkbox" />
<img src="3.jpg" />
<input type="checkbox" />
</div>

在页面加载时,我返回一个 JSON 数组:

{
    "src":["lml7x8nJzI.jpg","TaR7dALIPJ.jpg","TDE2pWgIfa.jpg","tUtuDx1BEf.jpg"],
    "checked":["lml7x8nJzI.jpg","TaR7dALIPJ.jpg","tUtuDx1BEf.jpg"]
}
  • src 包含图像的所有源名称,checked 是复选框的选中类型。
  • checked 定义选中哪个图像(每个图像都有一个复选框)。

我需要这样的最终 HTML:

<div id="image_div">
<input type="checkbox" />
<img src="lml7x8nJzI.jpg" />   
<input type="checkbox" checked />              //this is a checked one
<img src="TaR7dALIPJ.jpg" />    
<input type="checkbox" checked/>                 //this is a checked one
<img src="TDE2pWgIfa.jpg" />
<input type="checkbox" />                    //this is not
<img src="tUtuDx1BEf.jpg" />     
<input type="checkbox" checked />  //this is a checked one
</div>

我可以在 JavaScript 中使用array contains,还是有更好的方法?

我的尝试:

var initial = "<ul class='gallary'>";
var middle = "";
var end = "</ul>";
var i;

for (i = 0; i < data.src.length; i++)
{
    if (data.checked.contains(data.src[i]))   // How can I do this?
    {
        middle = middle +
            "<li><img src=" +
            "http://localhost/project/user/" +
            "<?php echo $this->session->userdata('username');?>" +
            "/pages/" +
            "<?php echo $this->uri->segment(3);?>" +
            "/images/gallery/" +
            data.src[i] +
            " />" +
            "<br /><input type='checkbox' value=" +
            data.src[i] +
            " checked/></li>";
    }
    else
    {
        middle = middle +
            "<li><img src=" +
            "http://localhost/project/user/" +
            "<?php echo $this->session->userdata('username');?>" +
            "/pages/" +
            "<?php echo $this->uri->segment(3);?>" +
            "/images/gallery/" +
            data.src[i] +
            " />" +
            "<br /><input type='checkbox' value=" +
            data.src[i] +
            " /></li>";
    }
}

var complete = initial + middle + end;
$("#project_gallary_layout").html(complete);

【问题讨论】:

    标签: javascript arrays contain


    【解决方案1】:

    你可以使用数组的indexOf方法

    var a = ['a', 'b', 'c'];
    if (a.indexOf('a') > -1 ) {
        //element is in array
    } else {
        //element is not in array
    }
    

    请注意,IE6 中没有 indexOf 方法,但 Mozilla 在 same page 上提供了一个实现。

    【讨论】:

      【解决方案2】:

      这是我使用 indexOf 的完整解决方案

      $(function(){
        var url = 'http://localhost/project/user/<?php echo $this->session->userdata('username'); ?>/pages/<?php echo $this->uri->segment(3); ?>/images/gallery/'
          , complete = '<ul class="gallery">'
      
        data.src.forEach(function(src){
          complete += '<li><img src="' + url + src + '"><input type="checkbox" value="' + src + '"'
          if(data.checked.indexOf(src) > -1){
            complete += ' checked'
          }
          complete += '></li>'
        })
      
        $("#project_gallary_layout").html(complete);
      })
      

      【讨论】:

        【解决方案3】:

        更好的方法是替换

        {"src":["lml7x8nJzI.jpg","TaR7dALIPJ.jpg","TDE2pWgIfa.jpg","tUtuDx1BEf.jpg"],
         "checked":["lml7x8nJzI.jpg","TaR7dALIPJ.jpg","tUtuDx1BEf.jpg"]}
        

        {"src":[
            {"src": "lml7x8nJzI.jpg", "checked": true},
            {"src": "TaR7dALIPJ.jpg", "checked": true},
            {"src": "TDE2pWgIfa.jpg", "checked": false},
            {"src": "tUtuDx1BEf.jpg", "checked": true}]
        }
        

        例如。

        那你可以写

        for(i=0;i<data.src.length;i++) {
            var elem = data.src[i];
            var checked = "";
            if (elem.checked)
                checked = "checked";
            middle = middle + 
                "<li><img src=" +
                "http://localhost/project/user/" +
                "<?php echo $this->session->userdata('username');?>" +
                "/pages/" +
                "<?php echo $this->uri->segment(3);?>" +
                "/images/gallery/" +
                elem.src +
                " />" +
                "<br /><input type='checkbox' value=" +
                elem.src +
                " " + 
                checked +
                "/></li>";
            }
        }
        

        您创建的两个字符串之间唯一不同的是属性checked(如果您想遵循标准,它实际上应该是checked="checked"),所以我更喜欢将变量checked设置为空字符串或“选中”取决于复选框是否被选中。

        【讨论】:

        • 不错,这是我首先想到的...但我在这里有点新,我如何操作这样的数组??
        • @DileepDil:你的意思是json对象中的数组吗?如果返回的对象是data,如示例中所示,您只需使用data.src[0].srcdata.src[0].checkeddata.src[1].srcdata.src[1].checked 等来访问这些值。您可以像分配任何其他变量一样分配给它们。
        猜你喜欢
        • 2016-03-13
        • 2021-08-19
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 2021-11-05
        • 2017-07-05
        • 1970-01-01
        相关资源
        最近更新 更多