使用.replaceWith()时保留元素

时间:2013-08-12 18:57:19

标签: javascript jquery

我一直在努力,所以欢迎任何帮助。我使用jquery replaceWith函数在网格(div)和表之间创建了一个切换。这很有效,但我的问题在于通过每次点击保持每个元素的特定链接不变。

在附加的示例中,我已将项添加到replaceWith函数,但它在所需元素之外呈现。例如,我希望链接保留在它最初所在的TR或Div中。当它呈现时,链接呈现在Table / Div元素之外。

实施例:     

<table class="toggle" style="display: table;">
    <tbody>
    <tr class="table-head">  <--- LINK SHOULD BE HERE --->  <th>Title</th><th>Date</th><th>Info</th></tr><tr><td>Class Title</td><td>Item Details</td><td>Item Details</td></tr>
    </tbody>
</table> 

希望我已经足够好地描述了这个问题。

http://jsfiddle.net/rymill2/R3J5m/

JS:

$btnTable = ".button-table";
$btnGrid = ".button-grid";
$table = "table.toggle";
$grid = ".grid";
$link = "a.grid-link";

if ($($table).length > 0) {    
    $($btnTable).addClass('active');
} else {
    $($btnTable).removeClass('active');
}
if ($($grid).length > 0) {
    $($btnGrid).addClass('active');
} else {
    $($btnGrid).removeClass('active');
}

$($btnTable).click(function() {
$(this).addClass('active');
$($btnGrid).removeClass('active');
$($grid).replaceWith(function() {
    var html = '';

    $('div:first', this).each(function() {
        html += '<tr class="table-head">';
        $('div', this).each(function() {
            html += '<th>' + $(this).html() + '</th>';
        });
        html += '</tr>';
    });

    $('div:not(:first)', this).each(function() {
        var innerHtml = '';
        var innerLink = '';
        $($link, this).each(function() {
            var href = $(this).attr('href');
            var id = $(this).attr('id');
            innerLink += '<a class="grid-link" href="'+ href +'" id="'+ id +'"></a>';    
        });

        $('div', this).each(function() {
            innerHtml += '<td>' + $(this).html() + '</td>';
        });
        if (innerHtml != '') {            
        html += '<tr>'+ innerLink + innerHtml +'</tr>';
        }
    });
    return $('<table class="toggle">' + html + '</table>').fadeIn(); 
});
});

$($btnGrid).click(function() {
$(this).addClass('active');
$($btnTable).removeClass('active'); 
$($table).replaceWith(function() {
    var html = '';
    $('tr', this).each(function() {
        html += '<div class="result three columns h-100">';
        $('th', this).each(function() {
            html += '<div>' + $(this).html() + '</div>';
        });
        $('td:first', this).each(function() {
            html += '<div class="grid-title">' + $(this).html() + '</div>';
        });    
        $('td:not(:first)', this).each(function() {
            html += '<div class="grid-row">' + $(this).html() + '</div>';
        });
        html += '</div>';

        $($link, this).each(function() {
            var href = $(this).attr('href');
            var id = $(this).attr('id');
            html += '<a class="grid-link" href="'+ href +'" id="'+ id +'"></a>';    
        });
    });

    return $('<div class="grid">' + html + '</div>').fadeIn();
});
});

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但如果你想插入一个链接作为桌头第一个孩子,你可以使用“Prepend”功能:

http://api.jquery.com/prepend/

$('.table-head').prepend('<a href="#">your link</a>');

结果:

<table class="toggle" style="display: table;">
    <tbody>
    <tr class="table-head">  <a href="#">your link</a>  <th>Title</th><th>Date</th><th>Info</th></tr><tr><td>Class Title</td><td>Item Details</td><td>Item Details</td></tr>
    </tbody>
</table>