Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > не отображается таблица с $.getJson()


Автор: dmitryk1 10.10.2008, 12:17
Код

          $.getJSON("http://10.2.8.18:8088/cgi-bin/test.pl",
                function(data){
                var tr;
                
                debugger;
                $("<table id='jst'></table>").prependTo(document.body);
                
                for(var i=0; i< data.length;i++){
                    tr=$("table#jst").append("<tr></tr>");
                    for(var j=0; j< data[i].length;j++){
                        $(tr).append("<td></td>").text(data[i][j]);                    
                    }
                }

                });   


в дебаггере смотрю $('body").html() появляется только <table id='jst'></table>, а всяческие <tr></tr> и <td></td> не аппендятся. 

А вот 

                       $(tr).append("<td></td>").text(data[i][j]);      

добавляет текст 
<table id='jst'>  вот сюда  </table> соответственно там оказывается последняя цифиря в массиве.

это всё по просмотру в отладчике. страничка в ие девственно чиста :-/

Автор: ZlojEzh 12.11.2008, 21:50
после выполнения
Код

 tr=$("table#jst").append("<tr></tr>");

переменная tr содержит объект jquery
поэтому дальше следует писать не $(tr).append(
а просто tr.append(

не проверял, но, мне кажется, должно помочь

Автор: ksnk 12.11.2008, 23:40
ZlojEzh, налицо непонимание основ идеологии jQuery smile

Идеологическая мысль, которую следует запомнить - в результате цепочки действий мы имеем дело с тем-же объектом, с которого цепочка началась. Исключения есть, но в каждом случае в документации специально об этом говорят, и вроде как извиняются  smile

Итого, tr=$("table#jst").append("<tr></tr>") даст нам tr, работающий с table#jst. Дальнейшая работа с ним поменяет внутренности таблицы, что ни к чему хорошему привести не может...
Нужно пользоваться функцией appendTo, да и конструкции <tr></tr> эффективнее и правильнее сократить до tr. что-нибудь вроде
Код

                $("<table id='jst'></table>").prependTo(document.body);
                
                for(var i=0; i< data.length;i++){
                    tr=$("tr").appendTo("table#jst");
                    for(var j=0; j< data[i].length;j++){
                        $("td").appendTo(tr).text(data[i][j]);                    
                    }
                }



ZlojEzh, Вообще говоря, $(tr), если tr уже объект jQuery вернет его-же. 

Автор: ZlojEzh 15.11.2008, 18:32
Цитата(ksnk @  12.11.2008,  23:40 Найти цитируемый пост)
Итого, tr=$("table#jst").append("<tr></tr>") даст нам tr, работающий с table#jst

виноват, заблуждался, спасибо )

а вот как должен работать Ваш пример, я не уловил
Цитата(ksnk @  12.11.2008,  23:40 Найти цитируемый пост)
конструкции <tr></tr> эффективнее и правильнее сократить до tr

в документации такого не нашел
полез в код jquery
там нашел регу, которая определяет, с чем jquery имеет дело - с селектором или html-кодом
выглядит она вот так 
Код
/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/

значит $('tr') будет восприниматься, как выбор по селектору
решил все же протестировать
в результате таких вот действий
Код

$("<table id='jst'></table>").prependTo(document.body);
tr=$("tr").appendTo("table#jst");
alert($("body").html());

получается
Код

<TABLE id="jst"></TABLE>


поясните, плз, если я где-то ошибаюсь

Добавлено через 1 минуту и 48 секунд
Цитата(ksnk @  12.11.2008,  23:40 Найти цитируемый пост)
ZlojEzh, Вообще говоря, $(tr), если tr уже объект jQuery вернет его-же. 

не знал, а попробовать не удосужился
опять же, спасибо )

Автор: ksnk 15.11.2008, 18:49
Цитата

да и конструкции <tr></tr> эффективнее и правильнее сократить до tr.

smile  
Мда... чего-то я в последнее время часто гоню. Надо бы начинать проверять то, что я тут задвигаю... 

Сократить, конечно, можно вот только до "<tr>", без угловых скобок оно действительно воспринимается как селектор. Да и особой эффективности как-то не ожидается, разве что на 4 байта меньше...

проверить сию конструкцию легко вот так
Код

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript"> 
var data =[[1,2,3],[4,5,6],[7,8,9,0]]

$("<table id='jst'></table>").prependTo(document.body);
                
                for(var i=0; i< data.length;i++){
                    tr=$("<tr>").appendTo("table#jst");
                    for(var j=0; j< data[i].length;j++){
                        $("<td>").appendTo(tr).text(data[i][j]);                    
                    }
                }
</script>
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)