- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 html 文档,其中包含 4 <p>
- 体内的标签。我有一个单独的 js 文件,想使用 javascript 来:
在第一段和第三段中创建并放置链接。
创建一个在显示和隐藏文本之间切换的函数当相应的链接是时,每个链接下面的段落 active 。这些段落应该从一开始就隐藏。
我无法使用切换功能。该页面仍然从一开始就显示所有段落,当我单击链接时,页面只会闪烁一毫秒。
下面是我的代码。我是初学者,我知道这是糟糕的代码,但我只是希望它成为一个工作脚本。我不明白为什么它不起作用,所以非常感谢擅长这方面的人提供帮助。
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
</head>
<body>
<p>When this link is activated..</p>
<p id="displayPara">..I want this hidden paragraph to be revealed.</p>
<p>And if the link below is clicked..</p>
<p>..this paragraph should be revealed.</p>
<script type="text/javascript" src="showHide.js"></script>
</body>
</html>
The JS-file:
//Creates the 2 links and puts them where I want them in the document body.
function Links() {
a = document.createElement("a");
a.setAttribute("href", "showHide.html");
a.setAttribute("id", "firstLink");
a.innerHTML = "<br></br>Show paragraph";
document.getElementsByTagName("p")[0].appendChild(a);
a2 = document.createElement("a");
a2.setAttribute("href", "showHide.html");
a2.setAttribute("id", "secondLink");
a2.innerHTML = "<br></br>Show paragraph";
document.getElementsByTagName("p")[2].appendChild(a2);
}
Links();
/*I want this function to toggle between showing and hiding the 2nd and 4th paragraphs when the links are clicked.
I tried with the first link first and it doesn't work.*/
a.onclick = function toggle() {
displayPara = document.getElementById("displayPara");
firstLink = document.getElementById("firstLink");
if(displayPara.style.display == "block") {
displayPara.style.display = "none";
firstLink.innerHTML = "Show paragraph"
}
else {
displayPara.style.display = "block";
firstLink.innerHTML = "Hide paragraph";
}
}
最佳答案
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
这不是 XML,没有短标签。使用:
<meta charset="utf-8">
title 元素必须包含内容:
<title>Show Hide</title>
在脚本中:
//Creates the 2 links and puts them where I want them in the document body.
function Links() {
按照惯例,以大写字母开头的函数名称是为构造函数保留的。另外,函数的名称应该暗示它的作用,因此:
function addLinks() {
a = document.createElement("a");
a.setAttribute("href", "showHide.html");
a.setAttribute("id", "firstLink");
直接设置属性比使用setAttribute更方便:
a.href = 'showHide.html';
a.id = 'firstLink';
大概 shoeHide.html 是您的代码所在的 HTML 文件的名称。因此,当单击链接时,页面会重新加载。您不应该使用链接(对于用户来说,链接看起来应该转到另一个页面),而应该使用按钮,该按钮指示将发生某些事情,但可能不会将用户带到任何地方。它也不需要 href 属性。
正如 Lior 所说,单击链接将重新加载页面,因此无论脚本可能进行什么修改,它们都是无关紧要的,因为原始页面随后会重新加载。
a.innerHTML = "<br></br>Show paragraph";
BR 元素为空,没有内容,也没有结束标记,因此:
a.innerHTML = "<br>Show paragraph";
但既然我建议使用按钮,请考虑:
var a = document.createElement('input');
a.type = 'button';
a.className = 'openCloseButton';
a.value = 'Show paragraph';
并将函数重命名为addButtons。然后是:
document.getElementsByTagName("p")[0].appendChild(a);
这很好。由于您希望在另一个 P 上有一个相同的按钮,因此您可以克隆刚刚制作的按钮:
document.getElementsByTagName("p")[2].appendChild(a.cloneNode());
这些按钮不需要 ID。但是您可能会考虑为需要按钮的段落提供一个类,以便您可以通过 className 访问它们,就像下面的按钮一样。
}
Links();
现在是切换代码。您可以使用按钮的类来获取按钮:
var buttons = document.querySelectorAll('.openCloseButton');
现在为每个添加相同的监听器:
for (var i=0, iLen=buttons.length; i<iLen; i++) {
现在是附件。
a.onclick = function toggle() {
无需为函数表达式命名。它们的存在只是为了可以从函数内部引用该函数(它们也便于调试)。某些版本的 IE 将命名函数表达式创建为全局函数,因此最好不要给它们命名,除非您有充分的理由这样做。
buttons[i].onclick = function() {
现在到了棘手的部分,如何引用相关段落来隐藏或显示?感兴趣的段落是按钮所在段落的下一个同级段落,这有点棘手。在执行此操作之前,您应该仔细考虑 DOM 布局,因为对结构的任何更改都会破坏您的功能。因此,拆分一个函数来获取下一个段落兄弟,可能如下所示:
function getNextParaSibling(el) {
var next;
// Search siblings until a P is found
while (el.nextSibling) {
next = el.nextSibling;
if (next.tagName && next.tagName.toLowerCase() == 'p') {
return next;
}
el = next;
}
// If a next sibling P isn't found, return null
return null;
}
现在在主函数中......
displayPara = getNextParaSibling(this.parentNode);
因为你不能确定它是否有效,所以处理它丢失的情况:
if (!displayPara) return;
现在,如果元素已使用 CSS 隐藏,则不会反射(reflect)在元素自己的 style.display 属性中。所以你可以使用compulatedStyle,但是你不知道如何设置它。所以事情很困惑。在这种情况下,最好使用类来隐藏和显示元素,然后只需添加或删除该类即可。您应该有一些库函数来帮助解决这一问题,但现在您可以假设元素只有一个类。所以假设有一个类:
.hideMe {display: none;}
然后将其添加到要隐藏的段落中,例如:
<p class="hideMe" ...>
那么你可以这样做:
// If element is hidden
if (displayPara.className == 'hideMe') {
displayPara.className = '';
} else {
displayPara.className = 'hideMe';
}
你就完成了。总之,HTML 可以是:
<p>When this link is activated..</p>
<p class="hideMe">..I want this hidden paragraph to be revealed.</p>
<p>And if the link below is clicked..</p>
<p class="hideMe">..this paragraph should be revealed.</p>
和脚本:
function addButtons() {
var a = document.createElement('input');
a.type = 'button';
a.className = 'openCloseButton';
a.value = 'Show paragraph';
document.getElementsByTagName("p")[0].appendChild(a);
document.getElementsByTagName("p")[2].appendChild(a.cloneNode());
}
addButtons();
function getNextParaSibling(el) {
var next;
// Search siblings until a P is found
while (el.nextSibling) {
next = el.nextSibling;
if (next.tagName && next.tagName.toLowerCase() == 'p') {
return next;
}
el = next;
}
// If a next sibling P isn't found, return null
return null;
}
var buttons = document.querySelectorAll('.openCloseButton');
for (var i=0, iLen=buttons.length; i<iLen; i++) {
buttons[i].onclick = function() {
displayPara = getNextParaSibling(this.parentNode);
if (!displayPara) return;
// If element is hidden
if (displayPara.className == 'hideMe') {
displayPara.className = '';
} else {
displayPara.className = 'hideMe';
}
}
}
尽管所有这些都应该从立即调用的函数表达式(又名 IIFE)内部运行。
关于javascript - 在显示和隐藏文本之间切换 (javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27646852/
我的Angular-Component位于一个flexbox(id =“log”)中。可以显示或隐藏flexbox。 我的组件内部有一个可滚动区域,用于显示日志消息。 (id =“message-li
我真的很困惑 有一个 phpinfo() 输出: MySQL 支持 启用 客户端 API 版本 5.5.40 MYSQL_MODULE_TYPE 外部 phpMyAdmin 显示: 服务器类型:Mar
我正在研究这个 fiddle : http://jsfiddle.net/cED6c/7/我想让按钮文本在单击时发生变化,我尝试使用以下代码: 但是,它不起作用。我应该如何实现这个?任何帮助都会很棒
我应该在“dogs_cats”中保存表“dogs”和“cats”各自的ID,当看到数据时显示狗和猫的名字。 我有这三个表: CREATE TABLE IF NOT EXISTS cats ( id
我有一个字符串返回到我的 View 之一,如下所示: $text = 'Lorem ipsum dolor ' 我正在尝试用 Blade 显示它: {{$text}} 但是,输出是原始字符串而不是渲染
我无法让我的链接(由图像表示,位于页面左侧)真正有效地显示一个 div(包含一个句子,位于中间)/单击链接时隐藏。 这是我的代码: Practice
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
最初我使用 Listview 来显示 oracle 结果,但是最近我不得不切换到 datagridview 来处理比 Listview 允许的更多的结果。然而,自从切换到数据网格后,我得到的结果越来越
我一直在尝试插入一个 Unicode 字符 ∇ 或 ▽,所以它显示在 Apache FOP 生成的 PDF 中。 这是我到目前为止所做的: 根据这个基本帮助 Apache XSL-FO Input,您
我正在使用 node v0.12.7 编写一个 nodeJS 应用程序。 我正在使用 pm2 v0.14.7 运行我的 nodejs 应用程序。 我的应用程序似乎有内存泄漏,因为它从我启动时的大约 1
好的,所以我有一些 jQuery 代码,如果从下拉菜单中选择了带有前缀 Blue 的项目,它会显示一个输入框。 代码: $(function() { $('#text1').hide();
当我试图检查 Chrome 中的 html 元素时,它显示的是 LESS 文件,而 Firefox 显示的是 CSS 文件。 (我正在使用 Bootstrap 框架) 如何在 Chrome 中查看 c
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频 https://youtu.be/ynG6Muox81o 学习它并在 Ubuntu 上使用 python
我正在尝试转换从 mssql 生成的文件到 utf-8。当我打开他的输出 mssql在 Windows Server 2003 中使用 notepad++ 将文件识别为 UCS-2LE我使用 file
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试执行单击以打开/关闭一个 div 的功能。 这是基本的,但是,点击只显示 div,当我点击“关闭”时,没有任何反应。 $(".inscricao-email").click(function
假设我有 2 张卡片,屏幕上一次显示一张。我有一个按钮可以用其他卡片替换当前卡片。现在假设卡 1 上有一些数据,卡 2 上有一些数据,我不想破坏它们每个上的数据,或者我不想再次重建它们中的任何一个。
我正在使用 Eloquent Javascript 学习 Javascript。 我在 Firefox 控制台上编写了以下代码,但它返回:“ReferenceError:show() 未定义”为什么?
我正在使用 Symfony2 开发一个 web 项目,我使用 Sonata Admin 作为管理面板,一切正常,但我想要做的是,在 Sonata Admin 的仪表板菜单上,我需要显示隐藏一些菜单取决
我试图显示一个div,具体取决于从下拉列表中选择的内容。例如,如果用户从列表中选择“现金”显示现金div或用户从列表中选择“检查”显示现金div 我整理了样本,但样本不完整,需要接线 http://j
我是一名优秀的程序员,十分优秀!