在javascript中替换Delete方法

时间:2017-06-22 05:21:56

标签: javascript jquery

我正在尝试在jquery / javascript中找到替换的删除方法,因为我能够使用删除方法强> IE11 即可。 IE发出错误对象不支持此属性或方法'删除'

我正在尝试替换以下代码:

formData.delete($(this).closest('.text-center').find('.imageUrl').attr("name"));

我想将删除方法替换为IE支持的任何其他方法。

3 个答案:

答案 0 :(得分:0)

如果formData是JavaScript对象,那么您应该能够使用以下内容:

var name = $(this).closest('.text-center').find('.imageUrl').attr("name");
delete formData[name];

请参阅delete docs on MDN

答案 1 :(得分:0)

According to MDN,在Internet Explorer中几乎不支持FormData几乎仍然乐观:它只支持append)。使用delete ...建议的fubar答案在这里不起作用,因为:

a = new FormData()
a.set('foo', 'bar')
a.get('foo') // "bar"
a['foo'] // undefined
delete a['foo'] // true
a.get('foo') // still "bar"

所以,经过一点头脑风暴后,我的第一个想法是:创建一个FormData对象的副本,而没有应删除的密钥(foreach键值对)。但是:这不会起作用,因为IE不支持entries,任何其他可能性(Object.keys和朋友)在我的测试中都不起作用。

我建议:使用Polyfill,如下所示:FormData polyfill

或者(根据你的例子我更喜欢):毕竟你可以考虑不使用FormData。由于构造函数FormData(form)只是使用从表单中获取的键值对来填充对象(name属性是键),因此可以使用普通的旧JavaScript对象实现此行为,然后才能使用使用对象中已知的任何内容(Object.keysdelete等。)。

function formData(form) {
  var result = {};

  $(form).children('input').each(function (i, elem) {
    result[elem.name] = elem.value;
  });
  
  return result;
}

var data = formData($('#my-form'));

console.log(JSON.stringify(data));

delete data['pet'];

console.log(JSON.stringify(data));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form id="my-form">
  <input type="text"
         value="Jon"
         name="name" />
  <input type="text"
        value="kitty"
        name="pet" />
</form>

答案 2 :(得分:0)

我看到IE除了append之外不支持FormData的任何其他方法,因此delete方法不起作用。因此,我删除了删除方法,只使用append解决了问题。

感谢您的所有回复。