gpt4 book ai didi

javascript - 在 JQuery 中,我怎样才能将 HTML 排除在我的 javascript 之外?

转载 作者:行者123 更新时间:2023-11-29 20:12:12 25 4
gpt4 key购买 nike

我认为 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);
}

几年前,我提出了一个几乎运行良好的解决方案,我经常使用它,但我仍然希望看到更好的东西,这就是我的问题所在。我目前的策略是在主 HTML 文件的底部创建一个隐藏的 div。例如:

<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);
}

好吧,您注意到我的解决方案有一点很糟糕,那就是它更加冗长,但公平地说,如果您的模板具有任何复杂性,它似乎确实很出色。模板的一个很好的候选者是具有 5 行或更多行的 HTML。另一件有利的事情是它确实完成了从 Javascript 中获取 HTML 的工作。现在我可以让我的 HTML 设计师编辑隐藏模板 div 中的 HTML,更改它的外观并根据需要放入类(教他模板及其作用很容易),所以现在他不不必接触 Javascript。但是,最近我在将整个表定义为模板时遇到了一些问题。当 JQuery 读取模板时,它会尝试重新解释表代码并将其搞砸。

最佳答案

jQuery 提供了一种语法,您可以在创建元素时指定属性。这应该提供您想要的干净外观。

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

您可能还想研究将棋盘 x/y 属性存储在数据对象中,而不是嵌入到 id 中。

$('<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);

关于javascript - 在 JQuery 中,我怎样才能将 HTML 排除在我的 javascript 之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com