2012-12-04 54 views
2

我有一个数组作为链接上的一个属性。解析Javascript数组

这里是阵列

images="["one.jpg","two.jpg"]" 

我怎么会在这个数组解析,并将它读回给我one.jpg,two.jpg?

这就是我现在正在做的,它给我一个错误。我不认为json解析是这里需要的。

var imgs = $("#"+number).attr("images"); 
var imgList = jQuery.parseJSON(imgs); 

编辑:实际代码

var number = $(this).attr("data-id"); 

var url = $("#"+number).attr("url"); 
$(".portfolio-url").html("<h3 class='pacifico'>url</h3><p><a href='http://"+url+"' target='_blank'>"+url+"</a></p>"); 

var cli = $("#"+number).attr("client"); 
$(".portfolio-client").html("<h3 class='pacifico'>client</h3><p>"+cli+"</p>"); 

var pgs = $("#"+number).attr("pages"); 
pgs = pgs.replace(/\[/g,""); 
pgs = pgs.replace(/\]/g,""); 
pgs = pgs.replace(/\"/g,""); 
var pages = new Array(); 
pages = pgs.split(","); 

var img = $("#"+number).attr("images"); 
img = img.replace(/\{/g,""); 
img = img.replace(/\}/g,""); 
img = img.replace(/\"/g,""); 
var images = new Array(); 
images = img.split(","); 

var portSkills = "<h3 class='pacifico'>skills</h2>"; 
portSkills += "<p>"; 
for (i=0;i<pages.length;i++) { 
if (pages[i] != "Clients") { 
var finalPage = ""; 
for (j=0;j<pages[i].length;j++) 
{ 
var ch = pages[i].charAt(j); 
if (ch == ch.toUpperCase()) { 
finalPage += " "; 
} 
finalPage += pages[i].charAt(j); 
} 
portSkills += finalPage+"<br />"; 
} 
} 
portSkills += "</p>"; 
$(".portfolio-skills").html(portSkills); 

var imgs = $("#"+number).attr("images"); 
var imgList = jQuery.parseJSON(imgs); 

基本上,其通过参数

+0

有你存储阵列的语法属性值的原因是什么? – Sampson

+0

这是真实的代码吗?围绕'[]'的双引号将打破它。 –

+0

是的,它是真实的代码。我一直在通过别人的代码试图解决一些问题。 – wowzuzz

回答

2

我会鼓励你修改你的属性值格式沿着这些线:

<div id="one" data-images="file1.jpg,file2.jpg">Foo, Bar</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

请注意,此处我使用的是有效的data-属性,此属性的值仅为逗号分隔文件名列表。无需将[]置于此值中以获取数组。

现在,让你的数组:

var images = $("#one").data("images").split(","); 

导致以下数组中:

["file1.jpg", "file2.jpg"] 
0
for (var i = 0; i < images.length; i++) { 
    var image = images[i]; 
} 
+1

你也错过了这一点,它是一个_string_,它的形式是一个数组字面值 –

+0

我以为他错误地输入了代码,一个数组:) – Slevin

0

对于初学者循环:

images = ["one.jpg", "two.jpg"];是一个数组,你是无效的。

把它读回给你

for(image in images) 
    console.log(images[image]); 

或jQuery的方式

$.each(images, function(index){ 
     console.log(images[index]); 
}); 

如果你需要再拆 但是那是当然的,如果串看起来像一个字符串这

var img = '["one.jpg", "two.jpg"]'; 

var images = img.replace(/\[|\]|"| /g,'').split(','); 

这将给你一个数组从字符串th看起来像一个数组。

+2

你错过了一点,它的值是一个_string_,存储在一个名为'images'的属性中 –

+0

是的,我点击发送按钮有点太快:) –

+0

我会给这个镜头:) – wowzuzz

1

不要把这种字符串放在属性中,你可以只用一个逗号分隔的字符串。 (你可以使用数据属性。)

例如:

<a id="foo" data-images="one.jpg,two.jpg">foo</a> 

,那么你可以用得到它:

var imgList = $('#foo').data('images').split(','); 
0

给这个join()method一试:

images.join(); 

=> "one.jpg,two.jpg" 

images.join(", "); 

=> "one.jpg, two.jpg" 

编辑:来声明Array

var images = ["img1", "img2", "img3"]; 

var images = new Array("img1", "img2", "img3"); 

然后你可以使用join()方法,如果仍然不行,请尝试following

// should be true, if not then you don't have an Array 
var isArray = (images instanceof Array); 
+0

当我这样做时,它给了我开发人员工具中的错误代码。 Uncaught TypeError:Object [“Equipment-L.jpg”,“Equipment-web2-L.jpg”,“EquipmentL.jpg”]没有方法'join' – wowzuzz

+0

你如何声明你的数组?请参阅[MDN数组指南](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array)。 – knownasilya

+0

看到我最后的编辑。 – knownasilya