[英]JavaScript hide/show element
按下后如何隐藏“编辑”链接? 当我按下编辑时,我还可以隐藏“lorem ipsum”文本吗?
<script type="text/javascript">
function showStuff(id) {
document.getElementById(id).style.display = 'block';
}
</script>
<td class="post">
<a href="#" onclick="showStuff('answer1'); return false;">Edit</a>
<span id="answer1" style="display: none;">
<textarea rows="10" cols="115"></textarea>
</span>
Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
</td>
function showStuff(id, text, btn) { document.getElementById(id).style.display = 'block'; // hide the lorem ipsum text document.getElementById(text).style.display = 'none'; // hide the link btn.style.display = 'none'; }
<td class="post"> <a href="#" onclick="showStuff('answer1', 'text1', this); return false;">Edit</a> <span id="answer1" style="display: none;"> <textarea rows="10" cols="115"></textarea> </span> <span id="text1">Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum</span> </td>
您还可以使用此代码显示/隐藏元素:
document.getElementById(id).style.visibility = "hidden";
document.getElementById(id).style.visibility = "visible";
注意style.visibility
和style.display
的区别在于使用visibility:hidden 时与display:none 不同,标签不可见,但在页面上为其分配了空间。 标签被渲染,它只是在页面上看不到。
请参阅此链接以查看差异。
我建议这样做来隐藏元素(正如其他人所建议的那样):
document.getElementById(id).style.display = 'none';
但是为了使元素可见,我建议这样做(而不是 display = 'block'):
document.getElementById(id).style.display = '';
原因是使用 display = 'block' 会导致在我正在处理的页面上的 IE(11)和 Chrome(版本 43.0.2357.130 m)中可见的元素旁边有额外的边距/空白。
当你第一次在 Chrome 中加载页面时,没有 style 属性的元素会在 DOM 检查器中显示如下:
element.style {
}
正如预期的那样,使用标准 JavaScript 将其隐藏起来:
element.style {
display: none;
}
使用 display = 'block' 使其再次可见将其更改为:
element.style {
display: block;
}
这和原来的不一样。 在大多数情况下,这很可能不会产生任何影响。 但在某些情况下,它确实会引入异常。
在 DOM 检查器中使用 display = '' 确实将其恢复为原来的 state,所以这似乎是更好的方法。
我想向您推荐JQuery选项。
$("#item").toggle();
$("#item").hide();
$("#item").show();
例如:
$(document).ready(function(){
$("#item").click(function(event){
//Your actions here
});
});
您可以使用元素的隐藏属性:
document.getElementById("test").hidden=true;
document.getElementById("test").hidden=false
按 ID
document.querySelector('#element-id').style.display = 'none';
By Class (单元件)
document.querySelector('.element-class-name').style.display = 'none';
By Class(多个元素)
for (const elem of document.querySelectorAll('.element-class-name')) {
elem.style.display = 'none';
}
您应该尽可能将 JS 用于行为,并将 CSS 用于视觉糖果。 通过稍微改变你的 HTML :
<td class="post">
<a class="p-edit-btn" href="#" onclick="showStuff(this.parentNode);return false;">Edit</a>
<span id="answer1" class="post-answer">
<textarea rows="10" cols="115"></textarea>
</span>
<span class="post-text" id="text1">Lorem ipsum ... </span>
</td>
只需使用 CSS 规则,您就可以从一个视图切换到另一个视图:
td.post-editing > a.post-edit-btn,
td.post-editing > span.post-text,
td.post > span.post-answer
{
display : none;
}
以及在两个类之间切换的 JS 代码
<script type="text/javascript">
function showStuff(aPostTd) {
aPostTd.className="post-editing";
}
</script>
虽然这个问题之前已经回答过很多次,但我想我会为未来的用户添加一个更完整和更可靠的答案。 主要答案确实解决了问题,但我相信了解/理解显示/隐藏事物的各种方法可能会更好。
.
在我找到其他一些方法之前,我一直都是这样做的。
Javascript:
$("#element_to_hide").css("display", "none"); // To hide
$("#element_to_hide").css("display", ""); // To unhide
优点:
缺点:
$("#element_to_hid").css("display", "inline");
否则它将默认回到“阻止”或任何其他它将被强制进入的状态。示例: https://jsfiddle.net/4chd6e5r/1/
.
在为此设置示例时,我实际上遇到了这种方法的一些缺陷,使其非常不可靠。
CSS/Javascript:
.hidden {display:none}
$("#element_to_hide").addClass("hidden"); // To hide
$("#element_to_hide").removeClass("hidden"); // To unhide
优点:
$(".hidden")
。缺点:
示例: https://jsfiddle.net/476oha8t/8/
.
Javascript:
$("element_to_hide").toggle(); // To hide and to unhide
优点:
缺点:
示例: https://jsfiddle.net/cxcawkyk/1/
.
Javascript:
$("#element_to_hide").hide(); // To hide
$("#element_to_hide").show(); // To show
优点:
缺点:
示例: https://jsfiddle.net/k0ukhmfL/
.
总的来说,我会说最好是 hide()/show() 除非你特别需要它作为切换。 我希望您发现此信息对您有所帮助。
只需为所有元素自己创建隐藏和显示方法,如下所示
Element.prototype.hide = function() {
this.style.display = 'none';
}
Element.prototype.show = function() {
this.style.display = '';
}
在此之后,您可以使用具有常用元素标识符的方法,如这些示例中的:
document.getElementByTagName('div')[3].hide();
document.getElementById('thing').show();
或者:
<img src="removeME.png" onclick="this.hide()">
我推荐 Javascript,因为它相对较快且更具延展性。
<script>
function showStuff(id, text, btn) {
document.getElementById(id).style.display = 'block';
// hide the lorem ipsum text
document.getElementById(text).style.display = 'none';
// hide the link
btn.style.display = 'none';
}
</script>
<td class="post">
<a href="#" onclick="showStuff('answer1', 'text1', this); return false;">Edit</a>
<span id="answer1" style="display: none;">
<textarea rows="10" cols="115"></textarea>
</span>
<span id="text1">Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum</span>
</td>
如果您在表格中使用它,请使用:-
<script type="text/javascript">
function showStuff(id, text, btn) {
document.getElementById(id).style.display = 'table-row';
// hide the lorem ipsum text
document.getElementById(text).style.display = 'none';
// hide the link
btn.style.display = 'none';
}
</script>
<td class="post">
<a href="#" onclick="showStuff('answer1', 'text1', this); return false;">Edit</a>
<span id="answer1" style="display: none;">
<textarea rows="10" cols="115"></textarea>
</span>
<span id="text1">Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum</span>
</td>
function myFunction() { var x = document.getElementById("myDIV"); if (x.style.display === "none") { x.style.display = "block"; } else { x.style.display = "none"; } }
<button onclick="myFunction()">Click Me</button> <div id="myDIV"> This is my DIV element. </div>
document.getElementById("an_id").hidden = true;
•特权:避免更改任何会使代码丑化的style
属性。
const hideElement = (e, ok) => e.setAttribute('hidden', !!ok);
[hidden="true"] { display: none }
显示️
hideElement(myElement, false);
隐藏
hideElement(myElement, true);
祝你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.