Javascript 从包含大量数据的textarea中删除某些文本

Javascript 从包含大量数据的textarea中删除某些文本,javascript,html,Javascript,Html,我使用HTML和Javascript制作了一个基本的XML格式化程序。我想在此添加一个删除函数。基本上,我希望能够删除一个条目,但不清除或破坏任何其他数据 <contact <!--John Doe--> first_name="John" last_name="Doe" contact_type="sip" account_id="104" subscribe_to="sip:104@10.10.1.24" has_voicemail="1" can_monit

我使用HTML和Javascript制作了一个基本的XML格式化程序。我想在此添加一个删除函数。基本上,我希望能够删除一个条目,但不清除或破坏任何其他数据

<contact
<!--John Doe-->
 first_name="John"
 last_name="Doe"
 contact_type="sip"
 account_id="104"
 subscribe_to="sip:104@10.10.1.24"
 has_voicemail="1"
 can_monitor="1"
>
<numbers>
 <number dial="1064" dial_prefix="" label="Extension" />
 <number dial="555-0123" dial_prefix="718" label="Work Line" primary="1" />

first\u name=“约翰”
last_name=“Doe”
联系方式_type=“sip”
账户_id=“104”
订阅=“sip:104@10.10.1.24"
有语音信箱=“1”
can\u monitor=“1”


我当时的想法是找到包含John Doe的联系人标签并从
中删除,我想您可以尝试其他方法

  • 创建一些Javascript对象来保存数据
  • 向该文本区域显示对象
  • 添加/删除数据时,首先操作对象,然后重新显示
  • 代码看起来像

    //Contact list.
    var contacts = [];
    
    // Contact class.
    function Contact() {
        ...
        this.name = "";
        this.numbers = [];// numbers
        ...
    }
    
    Contact.prototype.toString = function(){
        return "<contact name=\"" + this.name + ...;
    };
    
    // Add new Contact
    function addContact(params) {
    
        var contact = new Contact();
        // set properties
        // contact.name = name;
        contacts.push(contact);
        showContacts();
    }
    
    // Add new Contact
    function deleteContact(name) {
    
        for (var i = contacts.length-1; i >= 0; i--) {
            if (contacts[i].name == name) {
                contacts.splice(i, 1);
                return;
            }
        }
    }
    
    // present contacts
    function showContacts(){
        var text = "";
        for(var c in contacts){
            text += c.toString();
        }
        textarea.value = text;
    }
    
    // other functions like addNumber etc.
    
    //联系人列表。
    var触点=[];
    //联系班。
    功能联系人(){
    ...
    this.name=“”;
    this.numbers=[];//数字
    ...
    }
    Contact.prototype.toString=函数(){
    返回“=0;i--){
    如果(联系人[i].name==姓名){
    触点。接头(i,1);
    返回;
    }
    }
    }
    //当前联系人
    函数showContacts(){
    var text=“”;
    用于(触点中的var c){
    text+=c.toString();
    }
    textarea.value=文本;
    }
    //其他功能,如addNumber等。
    

    代码将变得有点复杂,但更加清晰和灵活。

    还有哪些数据不应受到影响?列表中的其他联系人。因此,如果我想删除John Doe,但不删除Jane。我看不到一个…仅使用字符串操作将无法处理更复杂的XML(只需想象一个CDATA区域,其中包含要作为结束分隔符查找的文本
    )。我建议将其解析为XML文档,以便使用常规DOM方法从中删除节点,然后将其转换回文本以供显示。