2012-12-04 57 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