Используя serializeArray для неформальных объектов?

Я пытаюсь опубликовать некоторые данные, созданные из неформальных элементов, но я не могу их взломать.

Как я могу создать массив в том же формате, что иserializeArray() делает с полями формы?

Я пробовал несколько вариантов на этом, но он подхватывает только последний.active тег.

$('li.tag.active').each(function() {
    values = {};
    values['tagID'] = $(this).attr('id');
});

$.post("/scripts/php/process.php",{     
    'data': data,
    funcName : 'tagResults'
},function(results){
    $("#results").html(results);
}) 

Ответы на вопрос(4)

jQuery serialize / serializeArray из элемента, который не является формой

$('div :input').serializeArray()

В дополнение к входам, это забирает select и textarea. Милая.

Решение Вопроса

который работает точно так же, как если бы это были поля ввода с serializeArray () ...

function getTags(){

        var data = new Array();

        $('li.tag.active').each(function() {
                data.push({ 'name':$(this).attr("name"), 'value':$(this).attr("id")});
         });

         $.post("/scripts/php/process.php",{ 
             'data': data,
             funcName : 'tagResults'
        }) 

}

с атрибутами «name» и «value». Обычно я использую его для сериализации форм. Я знаю, что вы сказали, что эти элементы управления не имеют формы, но я думаю, это можно использовать для сериализации любого объекта с атрибутом имя / значение. Это также выглядит достаточно легко, чтобы изменить его, чтобы искать другие атрибуты объекта, такие как ID. Трудно точно сказать, что вы там делаете, так как вы не показываете определение «данных» или использование «значений»

    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name]) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

Затем просто добавьте его в строку URL

var dataToPassToAjax = 'allData=' + myObject.serializeObject();

Если вы передаете только ОДНО значение, вам не нужно сериализоваться.

$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }). 

затем в process.php просто получите значение$ _REQUEST [ 'данные'] и он будет иметь ваш идентификатор

 T.P.20 сент. 2010 г., 17:39
Это мило. Я должен попробовать это сам :)
 Dutchie43220 сент. 2010 г., 20:55
Вы захотите изменить serializeObject, чтобы искать идентификатор вместо имени.
 v3nt20 сент. 2010 г., 17:39
спасибо, голландец - попробовал это, но, похоже, ничего не получилось, но, может быть, я использовал это неправильно? является
 v3nt20 сент. 2010 г., 17:39
$ .post ("/ scripts / php / process.php", {'data': $ ('li.tag.active'). serializeObject (), funcName: 'tagResults'}) правильный путь?
 Dutchie43220 сент. 2010 г., 17:43
если вы просто передаете один объект, вам не нужно сериализоваться. $ .post ("/ scripts / php / process.php", {'data': 'data =' + $ ('li.tag.active'). id, funcName: 'tagResults'}). затем в process.php просто получите значение $ _REQUEST ['data'] и он будет иметь ваш идентификатор
 v3nt20 сент. 2010 г., 18:05
Я пытаюсь сериализовать все объекты li.tag.active, поэтому я хочу сериализовать несколько объектов. В основном я обычно использую; var data = $ ("input.toPost"). serializeArray (); который отлично работает с любым входом с классом .toPost. Я предполагаю, что $ ('li.tag.active'). serializeObject () будет работать так же, но это не так? элементами li являются <li id ​​= "id_741" name = "tagID" class = "tag active"> TAG TITLE </ li> <li id ​​= "id_742" name = "tagID" class = "tag active"> TAG TITLE 2 </ li> <li id ​​= "id_748" name = "tagID" class = "tag"> TAG TITLE 3 </ li> - извините за то, что не было ясно до этого!

зуемым:

function makeSerializable(elem) {
  return $(elem).prop('elements', $('*', elem).andSelf().get());
}

Тогда вы можете использовать это так:

var arr = makeSerializable('li.tag.active').serializeArray();

или же

var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();

Ваш ответ на вопрос