如何使用JavaScript通过ID删除元素?

时间:2018-08-22 11:36:21

标签: javascript html

我正在尝试使用javascript添加和删除文件上传。 我可以添加元素,但是当我尝试删除相同的元素时,它会显示错误:

SyntaxError: expected expression, got '}

下面是我的HTML代码:

<form enctype="multipart/form-data" action="" method="post">
    <p>Upload file(s)</p>
    <div id="files">
        <p><input type="file" name="uploaded_file[]" /></p>
    </div>
    <p><input type="button" value="Add File" onclick="addFile();" /></p>
</form>

JS:

function addElement(parentId, elementTag, elementId, html) {
    // Adds an element to the document
    var p = document.getElementById(parentId);
    var newElement = document.createElement(elementTag);
    newElement.setAttribute('id', elementId);
    newElement.innerHTML = html;
    p.appendChild(newElement);
}

function removeElement(elementId) {
    // Removes an element from the document
    var element = document.getElementById(elementId);
    element.parentNode.removeChild(element);
}


var fileId = 0; // used by the addFile() function to keep track of IDs

window.addFile = function() {
    fileId++; // increment fileId to get a unique ID for the new element
    var html = '<input type="file" name="uploaded_files[]" /> ' +
           '<a href="" onclick="javascript:removeElement("file-' + fileId + '"); return false;">Remove</a>';
    addElement('files', 'p', 'file-' + fileId, html);
}

错误似乎在这行中,但是我不确定

var html = '<input type="file" name="uploaded_files[]" /> ' +
           '<a href="" onclick="javascript:removeElement("file-' + fileId + '"); return false;">Remove</a>';

jsFiddle here

1 个答案:

答案 0 :(得分:0)

"file-' + fileId + '"更改为\'file-' + fileId + '\'

您正在使用''字符在html var中设置字符串,因此可以在其中自由使用“”:var html = '<a href="myhref">'

但是当您还需要在一个已经打开的双引号中声明一个字符串时,您需要使用单引号并将其转义,因此JS知道您实际上并没有在开始时关闭初始单引号。 var html = '<a href="myhref" onclick="functionToCall(\'myStringInsideAnotherString\')">'

您仍然可以使用常规(不转义)单引号添加动态内容: var html = '<a href="myhref" onclick="functionToCall(\'myStringInside' + myOtherStringDeclaredSomewhereElse + 'AnotherString\')">'

此外,为了使您的小提琴正常工作,您需要将加载类型更改为“ No wrap”而不是onLoad。