【发布时间】:2020-07-07 15:17:43
【问题描述】:
我想知道为什么这种选择 DOM 元素的方式有效:
var $consoleDisplayHTML = document.getElementById('consoleDisplay');
var $watchedFolderHTML = document.getElementById('watchedFolder');
而这个不起作用:
var $consoleDisplayHTML = $('#consoleDisplay');
var $watchedFolderHTML = $('#watchedFolder');
填充文本的代码在第一种情况下有效,而不是在第二种情况下:
$consoleDisplayHTML.innerHTML = messages.pop().content;
$watchedFolderHTML.innerHTML = watchedFolder;
在 HTML 中,定义了 ID:
<h4>Console</h4>
<p id="consoleDisplay" class="darken-4 indigo white-text"></p>
<div class="card darken-1 grey">
<div class="card-content white-text">
<span class="card-title">Watched Folder</span>
</div>
<div class="card-action">
<p id="watchedFolder" class="darken-4 indigo white-text"></p>
</div>
...
在页面的<head>部分,声明了jQuery:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
我做错了什么?
----------------(编辑)
总结一下:
这行得通:
var $consoleDisplayHTML = document.getElementById('consoleDisplay');
var $watchedFolderHTML = document.getElementById('watchedFolder');
$consoleDisplayHTML.innerHTML = messages.pop().content;
$watchedFolderHTML.innerHTML = watchedFolder;
这不起作用:
var $consoleDisplayHTML = $('#consoleDisplay');
var $watchedFolderHTML = $('#watchedFolder');
$consoleDisplayHTML.innerHTML = messages.pop().content;
$watchedFolderHTML.innerHTML = watchedFolder;
这也不行:
var $consoleDisplayHTML = $('#consoleDisplay');
var $watchedFolderHTML = $('#watchedFolder');
$consoleDisplayHTML.html(messages.pop().content);
$watchedFolderHTML.html(watchedFolder);
终于成功了:
$consoleDisplayHTML.get(0).innerHTML = messages.pop().content;
$watchedFolderHTML.get(0).innerHTML = watchedFolder;
我现在明白这个符号是一个包装器:
$('#consoleDisplay');
这就是为什么不要忘记指定元素的索引的原因:
.get(0)
尽管如此,我仍然想知道为什么必须在需要对象的地方指定索引UNIQUE,因为$('#consoleDisplay') 表示法会查找ID。
ID 不是必须是唯一的吗??
感谢您的帮助和解释。
【问题讨论】:
-
代码有很多方式无法显示您想要的内容,例如您可能将
messages.pop().content和watchedFolder作为空字符串,因此代码将按预期工作,只是不会告诉你你想要什么。还要注意,如果元素不存在,像$('#consoleDisplay')这样的 jQuery 选择器不会失败,当你调用.html方法时,它会很高兴地执行但不会改变任何事情。 -
您必须记住,jQuery 对象包装了与其选择器匹配的任何元素,因此使用您的标记
$('.white-text')将匹配 2 个元素。当您通过其 id 选择一个元素时,您将拥有一个包含 1 个元素的集合的 jQuery 对象,.get(0)只检索该集合中的第一个元素。同样.get()返回整个元素集合,在你的例子中是一个包含 1 个元素的数组。
标签: javascript jquery jquery-selectors