osh*_*nen 2 html jquery jquery-selectors
我有以下脚本,它的行为与我期望它的行为方式不同:
success: function( widget_shell )
{
if( widget_shell.d[0] ) {
for ( i = 0; i <= widget_shell.d.length - 1; i++ ) {
$( ".column_" + widget_shell.d[i].column_id ).append( "<div class='widget_" + widget_shell.d[i].widget_id + "'>" );
$( ".widget_" + widget_shell.d[i].widget_id ).append( "<div class='widget_content_" + widget_shell.d[i].widget_id + "'>" );
$( ".widget_" + widget_shell.d[i].widget_id ).append( "</div>" );
$( ".column_" + widget_shell.d[i].column_id ).append( "</div>" );
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生这样的HTML:
<div id="divMain">
<div class="column_1 ui-sortable">
<div class="widget_9">
<div class="widget_content_9"></div>
<div class="widget_content_9"></div>
</div>
</div>
<div class="column_2 ui-sortable">
<div class="widget_9">
<div class="widget_content_9"></div>
</div>
</div>
<div class="column_3 ui-sortable">
<div class="widget_58">
<div class="widget_content_58"></div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当JSON数据如下所示:
{
"d": [
{
"__type": "Widget_Shell",
"column_id": 1,
"widget_id": 9
},
{
"__type": "Widget_Shell",
"column_id": 2,
"widget_id": 9
},
{
"__type": "Widget_Shell",
"column_id": 3,
"widget_id": 58
}
]
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,我应该看到基于JSON数据的每列只有1个小部件,这很好,但出于某种原因,我最终在第一列小部件中有2个内容...
知道为什么吗?
使用时,jQuery函数在选择元素时搜索整个文档$("...")
.在您的情况下,在第二次迭代中有两个.widget_9
元素,每个元素都有一个<div>
附加元素.
你想要的只是附加到刚刚创建的元素,可以通过以下方式完成.appendTo
:
var $widget = $("<div class='widget_" + widget_shell.d[i].widget_id + "'>")
.appendTo(".column_" + widget_shell.d[i].column_id);
$("<div class='widget_content_" + widget_shell.d[i].widget_id + "'>")
.appendTo($widget);
Run Code Online (Sandbox Code Playgroud)
$widget
每次迭代都会覆盖一个新元素,因此您不会弄乱前一次迭代的元素.
请注意,jQuery知道如何创建元素$("<div>")
,因此不需要结束标记.你也应该声明i
为var i
.
归档时间: |
|
查看次数: |
65 次 |
最近记录: |