如何将jQuery选择器存储在变量中?

问题描述 投票:1回答:2

我想知道为什么这种选择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是否必需UNIQUE ??

感谢您的帮助和解释。
javascript jquery jquery-selectors
2个回答
1
投票
第二段代码中的变量包含包装DOM元素的jQuery对象。

因此,如果您想设置innerHTML属性,则可以使用jQuery函数.html()

$consoleDisplayHTML.html(messages.pop().content); $watchedFolderHTML.html(watchedFolder);

如果要向Dom元素分配内部HTML,则可以从jQuery对象中提取包装的元素并将其设置为innerHTML属性。

$consoleDisplayHTML.get(0).innerHTML = messages.pop().content; $watchedFolderHTML.get(0).innerHTML = watchedFolder;

关于您的编辑:上面的摘录不起作用可能有多种原因。通常,对于此类问题,如果直接在<head>中执行该代码而不将其包含在可用于文档的回调中,则浏览器将在代码到达后立即执行该代码,但尚未创建DOM中的元素。为了避免使用回调,您可以尝试将您编写的javascript代码移至页面底部。

这是一个很好的旧文档就绪回调:

jQuery(function ($) { var $consoleDisplayHTML = $('#consoleDisplay'); var $watchedFolderHTML = $('#watchedFolder'); $consoleDisplayHTML.html(messages.pop().content); $watchedFolderHTML.html(watchedFolder); });


1
投票
您的第二个示例不起作用,因为变量包含jQuery对象,而不是第一个示例中的Element对象。因此,它们没有innerHTML属性。

要使用jQuery对象执行所需的操作,请使用html()方法:

$consoleDisplayHTML.html(messages.pop().content); $watchedFolderHTML.html(watchedFolder);

我建议您熟悉jQuery documentation,以查看可用的方法,因为它们与Element上可用的方法有很大不同。
© www.soinside.com 2019 - 2024. All rights reserved.