Как обернуть динамически выбранные идентификаторы, используя jquery или javascript - PullRequest
1 голос
/ 27 августа 2011

Я работаю над проектом в Google Blogger.Сначала я хочу кое-что объяснить.В блоггере каждое создаваемое сообщение имеет уникальный идентификатор, назначенный ему самим блогером.Этот идентификатор можно получить с помощью Blogger JSON.Итак, я получил идентификаторы четырех последних постов, используя JSON.Я хочу обернуть эти первые четыре контейнера id вокруг контейнера DIV, используя JQuery или Javascript.Проблема в том, что когда я использую эти идентификаторы абсолютно в селекторе $ и использую функцию wrapAll (), контейнер id оборачивается.Но, как я сказал, я использую JSON для получения идентификаторов контейнера, поэтому значения идентификаторов хранятся в переменных, и когда я использую эти переменные в качестве выбора для функции wrapAll (), это не работает.У меня есть демонстрации обеих этих ситуаций, которые можно увидеть, перейдя в этот блог http://youblog -demo.blogspot.com / и используя консоль firebug для запуска этого кода.когда я использую абсолютные идентификаторы контейнеров

var script = document.createElement("script");
script.src = "http://youblog-demo.blogspot.com/feeds/posts/default?alt=json&callback=hello";
document.body.appendChild(script);
function hello(json){
if(json.feed.entry.length>4){
var post_num=4;
var id_coll = new Array();
for(i=0; i<post_num; i++){
    var ids = json.feed.entry[i].id.$t;
    var post_id = ids.substring(ids.indexOf("post-"));
    var only_id = post_id.substring(5);
    id_coll[i] = only_id;
}
$("#3337831342896423186,#123892177945256656,#9095347670334802803,#2525451832509945787").wrapAll('<div>');
}
};

Ситуация 2, когда я использую переменные для выбора контейнеров

var script = document.createElement("script");
script.src = "http://youblog-demo.blogspot.com/feeds/posts/default?alt=json&callback=hello";
document.body.appendChild(script);
function hello(json){
if(json.feed.entry.length>4){
    var post_num=4;
    var id_coll = new Array();
    var front_name = "#";
    for(i=0; i<post_num; i++){
        var ids = json.feed.entry[i].id.$t;
        var post_id = ids.substring(ids.indexOf("post-"));
        var only_id = post_id.substring(5);
        id_coll[i] = only_id;
    }
var joined_id_0 = String.concat(front_name,id_coll[0]);
var joined_id_1 = String.concat(front_name,id_coll[1]);
var joined_id_2 = String.concat(front_name,id_coll[2]);
var joined_id_3 = String.concat(front_name,id_coll[3]);
$(joined_id_0,joined_id_1,joined_id_2,joined_id_3).wrapAll('<div>');
}
};

Поэтому, когда я использую код ситуации 2, он не работает, но код ситуации1 работает нормально.Кто-нибудь может мне помочь с этим

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Вам необходимо передать селектор в виде строки, а не списка аргументов;

$(joined_id_0+', '+joined_id_1+', '+joined_id_2+', '+joined_id_3).wrapAll('<div>');

Или, что еще лучше, заменить все из:

var joined_id_0 = String.concat(front_name,id_coll[0]);
var joined_id_1 = String.concat(front_name,id_coll[1]);
var joined_id_2 = String.concat(front_name,id_coll[2]);
var joined_id_3 = String.concat(front_name,id_coll[3]);
$(joined_id_0,joined_id_1,joined_id_2,joined_id_3).wrapAll('<div>');

на:

$('#'+id_coll.join(', #')).wrapAll('<div>');

И уберите строку: var front_name = '#';

0 голосов
/ 27 августа 2011

Вы должны объединить идентификаторы, разделенные запятой, как в #id1, #id2, ....

Вы можете сделать это следующим образом:

[joined_id_0,joined_id_1,joined_id_2,joined_id_3].join(',')

Вся строка:

$([joined_id_0,joined_id_1,joined_id_2,joined_id_3].join(',')).wrapAll('<div>');

Если это не работает, проверьте, что возвращает [joined_id_0,joined_id_1,joined_id_2,joined_id_3].join(',') (alert () it, или используйте console.log).

...