В JQuery, как я могу сохранить HTML вне моего JavaScript?

Я думаю, что JQuery великолепен, но мне также нравится идея сохранить HTML-код в HTML-документе и практически ни одного из них в javascript. Что я имею в виду? Вы знаете, как, скажем, вы создаете динамическую таблицу, которая имеет много строк или переменное количество строк. Это именно то, что я не хочу делать:

function initBoard(symbol) {
    for (var i=0;i<30;i++) {
        myBoard += "<tr>";
        enemyBoard += "<tr>";
        for (var j=0;j<60;j++) {
            myBoard += '<td bgcolor="#0000ff" id="my_sqr_'+i+'_'+j+'">'+symbol+</td>';
            enemyBoard += '<td bgcolor="#ff0000" id="enemy_sqr_'+i+'_'+j+'">'+symbol+'</td>';
        }
        myBoard += "</tr>";
        enemyBoard += "</tr>"
    }
    $("#my-board").html(myBoard);
    $("#enemy-board").html(enemyBoard); 
}

Несколько лет назад я придумал решение, которое почти хорошо работает, и я часто им пользуюсь, но я все еще хотел бы увидеть что-то лучшее, и в этом мой вопрос. Моя текущая стратегия состоит в том, чтобы создать скрытый div в нижней части основного файла HTML. Например:

<div class="hidden-templates" style="visibility:hidden;">
    <div id="board-line-tpl">
        <td bgcolor="--bg-color--" id="--side--_sqr_--index1--_--index2--">--symbol--</td>
    </div>
</div>

а затем javascript изменяется на что-то вроде этого:

function initBoard(symbol) {
    for (var i=0;i<30;i++) {
        myBoard += "<tr>";
        enemyBoard += "<tr>";
        for (var j=0;j<60;j++) {
                    // Get the template
            myBoardLine = $("#board-line-tpl").html();
                    // substitue the template's"variables" with unique data
                    myBoardLine.replace(/--side--/, "my");
                    myBoardLine.replace(/--bg-color--/, "#0000ff");
                    myBoardLine.replace(/--index1--/, i);
                    myBoardLine.replace(/--index2--/, j);
                    myBoardLine.replace(/--symbol--/, symbol);
                    myBoard += myBoardLine;
                    // You get the idea.  I'll leave this line as is.
            enemyBoard += '<td bgcolor="#ff0000" id="enemy_sqr_'+i+'_'+j+'"></td>';
        }
        myBoard += "</tr>";
        enemyBoard += "</tr>"
    }
    $("#my-board").html(myBoard);
    $("#enemy-board").html(enemyBoard); 
} 

Хорошо, одна вещь, которую вы замечаете, что отстой в моем решении, является немного более многословной, но, честно говоря, она выглядит блестящей, если ваш шаблон имеет какую-либо сложность. Хорошим кандидатом на шаблон является HTML с 5 или более строками. Еще одна вещь в его пользу - он делает работу по извлечению HTML из Javascript. Теперь я могу позволить своему HTML-дизайнеру редактировать HTML-код в div скрытого шаблона, а также изменять его внешний вид и помещать классы по своему усмотрению (его легко научить шаблонам и тому, что они делают), и теперь он этого не делает. не нужно трогать Javascript. Однако в последнее время у меня возникли проблемы с определением целых таблиц в качестве шаблона. Когда JQuery читает шаблон, он пытается переосмыслить код таблицы и испортит его.

2 ответа

jQuery предоставляет синтаксис, в котором вы можете указать атрибуты во время создания элемента. Это должно обеспечить чистый внешний вид, который вы хотите.

$('<tr />', {
    id: 'foo',
    class: 'row'        
});

Возможно, вы также захотите сохранить атрибуты платы x / y в объекте данных, а не встраивать их в идентификатор.

$('<tr />').data('x', xval); //set data property
var xval = $(element).data('x');

Вот пример, основанный на вашем коде:

http://jsfiddle.net/YAHDK/

var $table = $('<table />');    

for (var i = 0; i < 30; i++) {
    var $row = $('<tr />');

    for (var j=0;j<60;j++) { 
        var $td =($('<td />', {
            id: i + '_' + j,
            bgcolor: '#0000ff',
            text: i
        }));
        $row.append($td);      
    }

    $table.append($row);
}


$('body').append($table);

Попробуйте шаблоны jsRender, jsViews или jQuery

Это шаблонные решения, которые хорошо разделяют JavaScript и HTML. Я сам использую шаблоны jQuery и считаю, что это значительно экономит время, так как мне не нужно беспокоиться о HTML внутри JavaScript, а мой код буквально на 80% меньше из-за отсутствия HTML. Код также намного проще. Просто потратьте несколько минут, чтобы проверить шаблоны. Это того стоит.

Обратите внимание, что шаблоны jQuery оставлены для jsRender и jsViews, но шаблоны jQuery на данный момент работают очень хорошо для того, что вам нужно сделать, и переход к jsRender или jsViews будет простым с точки зрения концепций, а не с точки зрения понимания и синтаксиса.

Другие вопросы по тегам