从.html()中排除元素

时间:2012-11-04 16:38:49

标签: javascript jquery html api

我必须从jquery的.html()中删除一个特定元素(带#add_phone的按钮)。

所以这就是事情。首先是字段(电话号码)+选择(电话类型)+按钮(#add_phone),并且所有三个都作为容器包含在div中。当我单击按钮时,它将通过.html()重新创建。 JS如下:

$('#add_phone').click(function() {
    $('div.multiple_number:last').after('<div id="phone_div_id' + phone_div_id + '" class="multiple_number">'+ $('div.multiple_number').html() +'</div>');
    ...
    //append a remove [-] button, etc...     
});

这里是html:

<div class="multiple_number" id="phone_div_id0">
    <label>Phone Number(s):</label>
    <input name="phone" id="phone[]" placeholder="Phone Number"/>
    <select name="phone_type[]" id="phone_type">
        <option value="1">Mobile</option>
        <option value="2">Home</option>
        <option Value="3">Office</option>
        <option Value="3">Fax</option>          
    </select>
    <input type="button" name="add_phone" class="add_phone_class" id="add_phone" value="ADD MORE" />
</div>

因此,实际上,我正在为表单创建多个电话号码。但是,这就是问题所在。里面是输入类型=&#34;按钮&#34; (#add_phone按钮)。我想将它从.html()中排除。

我尝试过:

$('div.multiple_number:not(#add_phone)').html()
$('div.multiple_number:not(input#add_phone)').html()
$('div.multiple_number:not(#add_phone)').not(#add_phone).html()
$('div.multiple_number:not(#add_phone)').not(input#add_phone).html()

和类名对应而不是使用id名称。出于美学原因,我也不想将#add_phone按钮放在div之外。

2 个答案:

答案 0 :(得分:1)

我有点不清楚你在寻找什么,但我认为当点击#add_phone按钮时,你希望表单被复制并添加到它下面,但{ {1}}按钮本身。

取消该假设,以下内容应该有效

#add_phone

这是一个live jsfiddle demo来展示它的工作原理。

由于某些原因,您最初的尝试无效。主要的是$('#add_phone').click(function() { var numberForms = $('div.multiple_number'); var newNumberForm = numberForms.eq(0).clone(true); newNumberForm.find('#add_phone').remove(); newNumberForm.attr('id', 'phone_div_id' + numberForms.length); numberForms.last().after(newNumberForm); }); 选择器和:not()()方法仅对所选元素进行操作。它不会根据子元素进行过滤。这些方法仅在您选择.not的元素也具有ID <div class="multiple_number" />的情况下才有效。

此外,建议不要使用add_phone作为克隆方法。使用字符串操作作为直接DOM操作的替代方法可能会在以后引起问题。使用.html()将强制您必须将事件处理程序重新绑定到新创建的DOM元素。我上面提供的策略应该更具有前瞻性,因为它还将克隆任何被复制元素的事件处理程序。在某些情况下,某些浏览器在调用.html()时不会完全复制原始元素,这是避免它的另一个原因,除非您有特定的理由将DOM元素序列化为字符串。

答案 1 :(得分:0)

请改为尝试:

var innerHTML = $("div.multiple_number").html()
                .replace($("div.multiple_number input#add_phone").html(), "");

祝你好运