gpt4 book ai didi

jquery - 为什么 $ ("#element").get() 与 $ ("#element")[0] 不同?

转载 作者:行者123 更新时间:2023-12-01 03:49:25 25 4
gpt4 key购买 nike

我正在使用 jquery 对 html 5 文件上传进行一些测试,并遇到了一些奇怪的情况(至少对我来说)。我试图获取在文件控件中选择的文件列表:

<html><head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script>
</head>
<body>
<input type="file" multiple="multiple" id="inputFile" name="inputFile">
<button onclick="buttonClicked()" type="button">upload</button>
<script type="text/javascript">//<![CDATA[
function buttonClicked() {
console.log($("#inputFile").val()); // depending on the browser, gives either the file name, either the full path, but only for the first file
console.log($("#inputFile").files); // gives undefined
console.log($("#inputFile").attr("files")); // gives undefined
console.log($("#inputFile").get()); // according to the jquery documentation, give the dom element...
console.log($("#inputFile").get().files); // ...but strangely, files is undefined
console.log($("#inputFile")[0].files); // on the other hand, this gives me the list of files
}
//]]>;
</script>
</body></html>

所以首先我期待 $("#inputFile").val() 会给我最少的信息,可惜事实并非如此。所以我尝试了 input.files 的变体,但并没有真正期望它能够工作,因为它似乎不适合 jquery 对象(但是嘿,你永远不知道)。所以我尝试从 jquery 获取底层 dom 元素来访问文件项。这就是它变得奇怪的地方,因为它也是未定义的。另一方面$("#inputFile")[0].files 给出了预期的结果。

[编辑]然后,像往常一样,在输入这​​个问题时,我自己找到了解决方案。无论如何,我会把它留在这里,所以任何为此苦苦挣扎的人也有机会解决它。它基本上是在 RRTFM 上进行的,就像Really RTFM 一样:

All of the matched DOM nodes are returned by this call, contained in a standard array

这意味着,即使只有一个元素。所以调用:

console.log($("#inputFile").get());

返回一个包含一个元素的数组,当然数组没有 files 属性。本来应该是:

console.log($("#inputFile").get(0)); 
console.log($("#inputFile").get()[0]); // or this one, but that's a bit silly

最佳答案

问题是,除了 .get() 这个事实之外返回您使用 .get(0) 的数组( .attr() 给出第一个元素)而不是.prop() .

如果你想要elem.files ,访问它的 jQuery 方式是 $(elem).prop('files') .

当使用.attr()时对应于对 .getAttribute() 的调用这通常不是您想要的属性,例如 fileschecked 。 jQuery 有时会自动切换到属性,例如对于 checked ,但它当然不能涵盖每一个属性。

所以,你最终想要使用的是 $('#inputFile').prop('files')$("#inputFile").get(0).files 。但是,如果您的选择器不匹配任何内容,后者将引发错误。

关于jquery - 为什么 $ ("#element").get() 与 $ ("#element")[0] 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com