Я получаю строку с asps-страницы следующим образом:
~/TestImages/media/9.jpg?width=443&height=388&ext=.jpg?id=92,
~/TestImages/media/8.jpg?width=506&height=337&ext=.jpg?id=91,
~/TestImages/media/jpeg-3.jpg?width=720&height=480&ext=.jpg?id=75,
~/TestImages/media/4.jpg?width=725&height=483&ext=.jpg?id=77,
~/TestImages/media/7.jpg?width=957&height=629&ext=.jpg?id=81,
~/TestImages/media/10.jpg?width=478&height=356&ext=.jpg?id=85,
Каждый имеет разрыв строки "\ r\n", хотя..
Хотите создать массив только с URL (т.е. "/TestImages/media/9.jpg").
Попытка:
$.ajax({
url: url,
success: function(data){
var str = data.replace(/(\r\n|\n|\r)/gm,""),
imgArray = new Array,
tdata = str.split(",");
// make random order
for(var i=0; i < 13; i++){
var randomNumber = Math.floor(Math.random()*tdata.length);
imgArray.push(tdata.splice(randomNumber,1));
}
$.each(imgArray, function(i, item) {
var tmp = "";
tmp = item[0].match(/~(.*?)\.jpg/g, "$1");
item[0] = tmp;
});
}
});
Не так много удачи, изменяя значение внутри массива. У кого-нибудь есть способ сделать это?
Кажется, это делает работу:
var s = "~/TestImages/media/9.jpg?width=443&height=388&ext=.jpg?id=92, \
~/TestImages/media/8.jpg?width=506&height=337&ext=.jpg?id=91, \
~/TestImages/media/jpeg-3.jpg?width=720&height=480&ext=.jpg?id=75, \
~/TestImages/media/4.jpg?width=725&height=483&ext=.jpg?id=77, \
~/TestImages/media/7.jpg?width=957&height=629&ext=.jpg?id=81, \
~/TestImages/media/10.jpg?width=478&height=356&ext=.jpg?id=85";
var sa = s.split(",");
for(var i=0; i < sa.length;i++) {
var first = sa[i].indexOf("/");
var last = sa[i].indexOf("?");
sa[i] = sa[i].substring(first, last);
}
console.log(sa);
Вы можете играть с этим кодом здесь: http://jsbin.com/ePevaWos/1/edit?js,console
var arr = $.map(data.split(','), function(s) {
return s.trim().split('?').shift();
});
$.ajax({url: url, success: function (data) {var str = data.replace(/[\ r\n])/g, ""),//удалить все разрывы строк tdata = str.split( ","), imgArray = [];
$.each(tdata, function(i, item) {
var match = item.match(/~(.*?)\.jpg/)[1];
imgArray.push(match);
});
//shuffle now if desired
}
});
Вы также можете просто написать:
var imgArray = data.match(/~(.*?)\.jpg/g);
jQuery.each
документы jQuery.each
.
Javascript не имеет ссылок, поэтому вы не можете изменять значения элементов массива при его переходе по нему.
Итак, что вам нужно сделать, это создать еще один массив и, итерации, вставить в него значения:
var dst = [];
$.each(imgArray, function(i, item) {
dst.push(item[0].match(/~(.*?)\.jpg/g, "$1")[1]);
});
Почему бы просто не использовать String split
вместо regex?
for (var i = 0;i < imgArray.length; i++) {
imgArray[i] = imgArray[i].split('?')[0];
}