- 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/
我正在尝试创建一个简单的小部件,它只有一个切换按钮,但我的 AVD 模拟器上不断出现错误,提示“加载小部件有问题”。 似乎是因为我在小部件布局中添加了开关或切换按钮。 为了测试它,我创建了一个新的空
我正在使用 GLFW 进行键盘输入,但处理速度太快,因此我的 bool 开关在一次按下时被更改了 10 次,因为输入是每一帧处理的。我只需要按一次空格键即可切换状态。我当前的代码如下: if (glf
我希望完成一个相当简单的任务(我希望!) 我有两个 div 标签和一个 anchor 标签,像这样: forgot password? 我希望使用 anchor 标记在两个 div 标记之间切换,
我已经尝试了几种不同的方法,但似乎无法弄清楚如何将 span 的类从“die2”切换到“die3”以及将 div 的显示样式从“block”切换到“none”。有人有任何解决方案吗? (基本上当页面加
我正在尝试制作一个交换小部件,该小部件显示两个不同的文本。激活时,它下面显示一个TextField,顶部是不可见的,而禁用时它上面显示一个Text,而底部是不可见。但是它没有在屏幕上显示任何内容,只是
我有一个简单的 Angular 应用程序,它使用两个模板和 Controller 。放置两个按钮来切换 View 。它们调用在控件内定义的函数,该函数使用 window.location='' 来切换
我想要一个 div 切换它的类(切换)onclick,然后再次恢复到原来的类 onclick 我的代码是: function myfunc() { //the code over here
我确信这是一个常见问题,我已经尝试了该网站上的许多线程来尝试解决我的问题,但我似乎无法使其正常工作。基本上我有一个子菜单,当父菜单悬停在其上时需要显示该子菜单,但是如果您在加载完成之前将鼠标从菜单项上
我制作了一个 JavaScript 函数来隐藏单击按钮时的链接及其在该函数中的工作 function toggle() { var ele = document.getElement
我正在使用我在 JS fiddle 上找到的这个脚本:http://jsfiddle.net/Q4PUw/2/ 当我点击切换链接时,它会切换框并显示它,但是,它会跳回页面顶部,然后我必须再次向下滚动才
我正在 GoDaddy 上的共享服务器 IP 上构建 Web 应用程序。该应用程序与验证请求服务器 IP 的房地产 API 进行对话。问题是在 GoDaddy 上,我们的 IP 被列为 X,但它实际上
我在 jquery 中有一个简单的脚本,可以在 时切换 div(显示和隐藏)。被点击(我正在使用 Bootstrap )。 HTML: Advanced search This is t
我有两个 NSWindows,其中都有一个 NSPanel。我想在按下按钮时切换窗口。如何才能做到这一点?我不再需要旧窗口,所以我只想显示新窗口。 最佳答案 要聚焦第二个窗口,只需调用: [windo
我尝试在单击切换时将选项添加到选择菜单,但如果再次单击(取消选择),则可以将其删除。到目前为止,我可以在单击时向选择菜单添加单个值,但无法将其删除(切换添加切换删除) 这是我的代码: HTML
我正在尝试隐藏所属行。例如,如果您单击“子标题 1”,则将仅隐藏项目 1、项目 2 和项目 3 行。 示例: title Sub Title 1
似乎无法让它为我工作,任何人都可以为我提供帮助吗? http://codepen.io/anon/pen/kABjC 这应该根据点击打开和关闭文本部分,它采用 ID #,它只是一个数字(1,2,3,4
我正在从一个文件复制到另一个文件,并且我可以看到 Excel 在源文件和目标文件之间切换(如闪烁)。我希望宏从源复制并粘贴到目标,而不在文件之间切换(我不想闪烁)。 这里我得到了我的 Excel VB
我正在尝试制作一个带切换功能的 Accordion ,现在看起来效果很好。作为 javascript 的新手,我希望得到一些帮助,那就是它的组合方式。 http://jsfiddle.net/z3wW
我正在尝试制作一个小脚本,其中屏幕将每 100 毫秒随机更改一次背景颜色,您可以通过按一个按钮来打开和关闭它。我可以让它开始,但我不能让它停止。 这是切换的主要代码: var on = -1; fun
我确信这里应该已经涵盖了这一点,但我一直无法找到专门涉及此问题的问题。 我在一个页面中有 2 个 div,就像这样...... ...content... ...content...
我是一名优秀的程序员,十分优秀!