不能使用.replaceWith()函数删除标记之间的所有html代码

时间:2011-08-10 10:18:50

标签: javascript jquery

为什么.replaceWith()在以下代码中不起作用?

单击单选按钮后,<form>之间的HTML将被删除。

$('input:radio').click( function(){                        
   var url = $(this).attr('alt');                       
   $('form').replaceWith($('<form action="'+url+'" method="post" class="url">' + this.innerHTML + '</form>'));                        
});

示例: http://jsfiddle.net/MWFN9/1/

3 个答案:

答案 0 :(得分:3)

我认为您尝试执行的操作是在单击单选按钮时更改action属性的值。

replaceWith替换整个元素(以及它的子元素),这就是整个表单被替换的原因(空表格)。

相反,您可以使用attr更改单个属性的值:

$('input:radio').click(function() {                        
    var url = $(this).attr('alt');                       
    $('form').attr("action", url);                        
});

答案 1 :(得分:0)

input[type=radio]没有任何innerHTML。另一方面, 表单 可以。

但是,我认为你需要这样的代码:

$('input:radio').click( function(){                        
    var url = $(this).attr('alt');                       

    $(this).closest('form').attr('action', url); // Target the form for this input, rather than the first form in the document ($('form')).
});

查看工作小提琴:http://jsfiddle.net/MWFN9/2/,并查看attr()方法的文档。

答案 2 :(得分:0)

处理程序第二行中的

this引用input元素。因此this.innerHTML为空。您将重新创建没有内容的表单。