代码之家  ›  专栏  ›  技术社区  ›  Joshua Hayes

如何从div中移除特定的锚标记和跟随delimeter

  •  1
  • Joshua Hayes  · 技术社区  · 14 年前

    我正在尝试创建一个outlook样式 To: /当我从我编写的javascript通讯簿中选择联系人时,收件人列表。

    我在通讯簿中有一个联系人列表,当选中时,该列表如下所示。。。

    <div class="contact selected">
        <div style="clear: both;"></div>
        <div class="innertxt" id="c_e4f6ea43-03fd-4496-aa58-917a17e31206">
            <span id="Test User">
            <img width="48" height="48" src="/Content/Cache/4.gif"><a href="/Management/Employee/Edit/e4f6ea43-03fd-4496-aa58-917a17e31206" class="contact-link">Test User</a>
            <ul>
                <li>test.user@test.com</li>
                <li>123456789</li>
            </ul>
        </span></div>
    </div>
    

    一个接受者div看起来像这样。。。

    <div id="RecipientNames"></div>
    

    我运行了一些javascript来选择这个用户中的锚标记,并将achor和一个分隔符一起添加到我的收件人字段中 ;

    function ContactSelected(contact) {
        var contactLink = $(contact).find('div[id^="c_"] a');
        contactLink.clone().appendTo("#RecipientNames");
        $("#RecipientNames").append("; ");
    }
    

    传递给此函数的触点是此问题开始时显示的整个触点元素。

    因此,我最终。。。。

    <div id="RecipientNames">
      <a class="contact-link" href="/Management/Employee/Edit/e4f6ea43-03fd-4496-aa58-917a17e31206">Test User</a>; 
    </div>
    

    问题

    给定一个有多个收件人的RecipientNames div,我可以使用什么jquery来删除联系人链接锚标记和下面的“;”。

    <div id="RecipientNames">
      <a class="contact-link" href="/Management/Employee/Edit/e4f6ea43-03fd-4496-aa58-917a17e31206">Test User2</a>;
      <a class="contact-link" href="/Management/Employee/Edit/e4f6ea43-03fd-4496-aa58-917a17e31206">Test User2</a>;
      <a class="contact-link" href="/Management/Employee/Edit/e4f6ea43-03fd-4496-aa58-917a17e31206">Test User3</a>;
    </div>
    

    例如,如果我想移除 TesetUser2; 这就是全部 <a> 标签后加上分号。在这种特殊情况下,中间用户和分号被删除。但它们可以按任意顺序删除,因此始终需要在指定的联系人之后使用分号。

    我将如何实现将被调用的Remove函数。我试过以下方法,但这只是猜测,因此不起作用:)

    public ContactRemoved(contact) {
         var selector = $(contact).find('div[id^="c_"] a').attr("href");
         var recipients = $("#RecipientNames");
         $(recipients).remove('a[href^="' + selector + '"]').remove("; ");
    }
    

    最终解决方案

        function ContactSelected(contact)
        {
            // append selected contact name to recipient list.
            var contactLinkSpan = $("<span>");
            var contactLinkClone = $(contact).find('div[id^="c_"] a').clone();
            contactLinkClone.appendTo(contactLinkSpan);
            contactLinkSpan.append("; ");
            contactLinkSpan.appendTo("#RecipientNames");
        }
    
        function ContactRemoved(contact) {
            // remove selected contact from recipient list.
            var selector = $(contact).find('div[id^="c_"] a').attr("href");
            $("#RecipientNames").find('a[href^="' + selector + '"]').parent().remove();
        }
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Salman Paracha    14 年前

    我会将每个分号包装在一个span标记中( <span id="{associated_anchor_tag}">;</span> )并将关联锚定标记标识符添加为id属性。准备删除特定联系人时,请找到相应的span标记并对其执行简单的$.remove()操作

    下面的示例代码应该有助于理解上面的答案

    创建跨度标记

    var contactLink = $(contact).find('div[id^="c_"] a');
    var contactLinkIdentifier = $(contact).find('div[id^="c_"]').attr("id");
    contactLink.clone().appendTo("#RecipientNames");
    $("#RecipientNames").append('<span id="'+contactLinkIdentifier+'">;</span>');
    

    删除正确的节点

     function contact_removed(contact) {
         var selector = $(contact).find('div[id^="c_"] a').attr("href");   
         var contactLinkIdentifier = $(contact).find('div[id^="c_"]').attr("id");
         var recipients = $("#RecipientNames");
         $(recipients).remove('a[href^="' + selector + '"]');
         $(recipients).remove(contactLinkIdentifier);
     }
    

    如果您只需向锚标记添加id属性并只需调用remove一次,就可以删除一些代码行

    编辑: 如果希望分号位于 <span> <a> 标记,然后简单地创建一个新的span标记并将 <a> 标记克隆。下面的一些示例代码应该会有所帮助

    var contactLinkSpan = $("<span>");
    var contactLinkClone = $(contact).find('div[id^="c_"] a').clone();
    contactLinkClone.appendTo(contactLinkSpan);
    contactLinkSpan.append("; ");
    contactLinkSpan.appendTo("#RecipeintNames");
    

    而且,当您准备删除时,只需找到 <a> 标记,获取其父级 <跨度> 标记),您可以通过调用$.remove()从DOM中删除它

        2
  •  0
  •   Joshua Hayes    14 年前

    我试着把锚放在跨度内,就像我对@Salman的评论一样。这就是我试过的

    $("#RecipientNames").append('<span id="' + contactLinkIdentifier + '">'+contactLink.clone()+';</span>'); .

    但是,这会导致[object object]被放置在范围内。 <span id="c_e4f6ea43-03fd-4496-aa58-917a17e31206">[object Object];</span> ,而不是呈现范围内的实际元素。

    我也试过用 contactLink.clone().html() 但这只是呈现元素的html值,而不是整个元素的html。