html - Jquery 认为我的元素可见,即使显示设置为无和/或可见性设置为隐藏
问题描述
请看一下我在下面创建的示例。当您单击该按钮时,将<g>
切换并显示或隐藏绿点。
奇怪的is(':visible')
是,即使visibility
设置为, 总是返回 true hidden
。
为什么会这样?
console.log('Jquery running...')
$("button").click( () => {
var prev = $("g").attr('visibility');
if (prev === 'hidden') {
$('g').attr('visibility', 'visible');
} else {
$('g').attr('visibility', 'hidden');
}
console.log('element is visible:', el.is(':visible'));
});
var el = $('g');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>My Example</p>
<svg width="20" height="30">
<g>
<circle cx="10" cy="10" r="10" fill="green"></circle>
</g>
</svg>
<button> Toggle Dot </button>
更新
我也尝试过更早的设置display
,none
但也没有用
解决方案
切换circle
作品的可见性
jQuery源代码:
jQuery.expr.pseudos.visible = function( elem ) {
return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
};
这里offsetWidth, offsetHeight, getClientRects()
返回元素null
_g
console.log('Jquery running...')
$("button").click(() => {
el.toggle();
console.log('element is visible:', el.is(':visible'));
});
var el = $('g circle');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>My Example</p>
<svg width="20" height="30">
<g>
<circle cx="10" cy="10" r="10" fill="green"></circle>
</g>
</svg>
<button> Toggle Dot </button>
推荐阅读
- css - 将弹性项目垂直并排居中在同一级别
- visual-studio-code - 是否可以在活动栏和侧栏下方有VScode的集成终端?
- visual-studio - TFS Visual Studio - 如何在挂起的更改中默认排除更改?
- c# - SSIS - 移动并打开 zip 文件/加载 xml 文件到 BD
- javascript - 用于消失 div 动画的 CSS 不会在悬停时暂停
- go - 不能使用 append(*pairs, Pair literal) (type Pairs) 作为 type *Pairs in assignment
- python - 在命令行中打印 .py 文件输出
- scala - 如何修改 Scala 演员以返回 List[String]?
- configuration - WebStorm - 在 mac 上双击然后按住 cmd 会显示工具窗口栏
- java - 如何在 AssertJ 可迭代断言中使用身份比较