如果存在多个子项,则删除最后一个子问题

时间:2011-08-13 14:42:24

标签: javascript jquery

removeChild: function(select) {
    $(select).nextAll().remove();
}

我正在尝试动态创建一个<select>框的链,这是一个示例函数:

JQUERY:

getLanguages: function() {
    $.ajax({
        url: './db_scripts/get_languages.php',
        success: function( data ) {
            $('<select>', {
                id: 'languages',
                html: createOptions( data,'Language' )
            }).appendTo('#sidebar');
        }
    });
},

selects.getLanguages();
$('#languages').live('change', function() {
    selects.removeChild($(this));
    selects.getCategories();    
});

我的 HTML 只是:

<div id="sidebar"></div>

添加选择工作完美。我想要做的是有另一个功能,删除已更改的选择下面的任何子项。这样,它会删除所有子项<select>,用户可以在<select>树中的任何位置更改选择过程。以下是其工作示例(尝试更改顶级选项)http://philipimperato.com/mobileOrder

这是我的removeChild()功能:

removeChild: function(select) {
        alert('This is what is being passed in: ' + $(select).attr('id'));
        alert('This is the last child of the div, #sidebar: ' + $(select).parent('div').children('select:last-child').attr('id'));
        while($(select).parent('div').children('select:last-child') != $(select)) {
            alert('Same as first: ' + $(select).attr('id') + 'Same as 2nd: ' +$(select).parent('div').children('select:last-child').attr('id'));
            $(select).parent('div').remove($(select).parent('div').children('select:last-child'));
        }
    }

我已经为您提供了方便的信息:这是网站:InsanelyWeb

该函数无效并给我一个jQuery错误:“c.replace不是函数” - 我不知道如何解决这个问题。有没有人对我有任何建议?谢谢! 的修改


这是在普通javascript中工作的函数(我只想知道)

while(el.parentNode.lastChild != el) {
    el.parentNode.removeChild(el.parentNode.lastChild);
}

我正在尝试将其转换为jquery以执行更多内容,例如hide()

while($(el).parent('div').children('select:last-child') != el) {
            $($(el).parent('div').children('select:last-child')).remove();
        }

1 个答案:

答案 0 :(得分:3)

我不太确定你在removeChild尝试做什么,但是看看你的代码,我认为你误解了.remove()在jQuery中的工作方式。它删除了所选的元素(如选择器所示)。因此,如果您要删除select中的removeChild元素,则可以执行以下操作:

$(select).remove();

另一种从DOM中删除元素的方法是.empty(),它会删除所选元素的所有子元素。因此,如果您要删除#sidebar的所有子项,您可以执行以下操作:

$('#sidebar').empty();

修改

好的,这是我的第二次尝试:)

removeChild: function(select) {
    $(select).nextAll().remove();
}

看看.nextAll()。这可能就是你追求的目标。