3zz*_*zzy 15
JS:
<div onclick="location.href='url'">content</div>
Run Code Online (Sandbox Code Playgroud)
jQuery的:
$("div").click(function(){
window.location=$(this).find("a").attr("href"); return false;
});
Run Code Online (Sandbox Code Playgroud)
确保使用cursor:pointer这些DIV
Jus*_*ost 11
如果你必须在div中设置你的锚标签,你也可以使用CSS来设置锚点以通过display:block填充div.
因此:
<div style="height: 80px"><a href="#" style="display: block">Text</a></div>
Run Code Online (Sandbox Code Playgroud)
现在,当用户将光标悬浮在该div中时,锚标记将填充div.
Rae*_*nha 10
如果你正在使用HTML5,正如另一个问题所指出的,你可以把你的div内部a:
<a href="http://www.google.com"><div>Some content here</div></a>
Run Code Online (Sandbox Code Playgroud)
预先使用此方法,因为它在您的结构中明确了所有内容都是可点击的,以及它指向的位置.
所以你想要一个元素不是它的东西?
一般来说,这不是一个好主意.如果您需要链接,请使用链接.大多数情况下,只使用它所属的适当标记会更容易.
总而言之,有时你只需打破规则.现在,问题没有javascript,所以我将把免责声明放在这里:
如果<div>没有使用链接(或等效链接,例如<form>只包含提交按钮的链接)或使用JavaScript,则不能将链接作为链接.
从现在开始,这个答案将假设允许使用JavaScript,而且还使用了jQuery(为了简洁起见).
有了这一切,让我们深入了解链接的链接.
链接通常是您单击的元素,以便它们导航到新文档.
看起来很简单.收听点击事件并更改位置:
不要这样做$('.link').on('click', function () {
window.location = 'http://example.com';
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="link">Fake Link</div>Run Code Online (Sandbox Code Playgroud)
你有它,<div>现在是一个链接.等等......那是什么?可访问性怎么样?哦,对,屏幕阅读器和辅助技术的用户将无法点击链接,特别是如果他们只使用键盘.
修复这很简单,让我们只允许键盘用户聚焦<div>,并在按下时触发click事件Enter:
$('.link').on({
'click': function () {
window.location = 'http://example.com';
},
'keydown': function (e) {
if (e.which === 13) {
$(this).trigger('click');
}
}
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="link" tabindex="0">Fake Link</div>Run Code Online (Sandbox Code Playgroud)
再一次,你有它,<div>现在这是一个链接.等待......再?还是可访问性问题?哦,好吧,事实证明,辅助技术还不知道它<div>是一个链接,所以即使你可以通过键盘到达那里,用户也不会被告知如何处理它.
幸运的是,有一个属性可用于覆盖HTML元素的默认角色,因此屏幕阅读器等知道如何对自定义元素进行分类,就像我们<div>这里一样.该属性当然是[role]属性,它很好地告诉屏幕读者我们<div>是一个链接:
$('[role="link"]').on({
'click': function () {
window.location = 'http://example.com';
},
'keydown': function (e) {
if (e.which === 13) {
$(this).trigger('click');
}
}
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div role="link" tabindex="0">Fake Link</div>Run Code Online (Sandbox Code Playgroud)
最后,我们<div>是林---哦现在其他开发者都在抱怨.现在怎么办?
好吧,所以开发者不喜欢这些代码.他们试图参加preventDefault这个活动,它只是继续工作.这很容易解决:
$(document).on({
'click': function (e) {
if (!e.isDefaultPrevented()) {
window.location = 'http://example.com';
}
},
'keydown': function (e) {
if (e.which === 13 && !e.isDefaultPrevented()) {
$(this).trigger('click');
}
}
}, '[role="link"]');
$('[aria-disabled="true"]').on('click', function (e) {
e.preventDefault();
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div role="link" tabindex="0">Fake Link</div>
<div role="link" aria-disabled="true" tabindex="0">Fake disabled link</div>Run Code Online (Sandbox Code Playgroud)
我们有它---还有更多?还有什么我不知道的?告诉我一切现在这样我就可以修复它!
window.open.[data-*]属性,并用它来称呼它.<DIV>不是主持人!好吧,我将解决前四个问题,而不是更多.我已经用这个愚蠢的自定义元素垃圾了.我应该<a>从一开始就使用一个元素.
$(document).on({
'click': function (e) {
var target,
href;
if (!e.isDefaultPrevented() && (e.which === 1 || e.which === 2)) {
target = $(this).data('target') || '_self';
href = $(this).data('href');
if (e.ctrlKey || e.shiftKey || e.which === 2) {
target = '_blank'; //close enough
}
open(href, target);
}
},
'keydown': function (e) {
if (e.which === 13 && !e.isDefaultPrevented()) {
$(this).trigger({
type: 'click',
ctrlKey: e.ctrlKey,
altKey: e.altKey,
shiftKey: e.shiftKey
});
}
}
}, '[role="link"]');
$('[aria-disabled="true"]').on('click', function (e) {
e.preventDefault();
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div role="link" tabindex="0" data-href="http://example.com/">Fake Link</div>
<div role="link" tabindex="0" data-href="http://example.com/" data-target="_blank">Fake Link With Target</div>
<div role="link" aria-disabled="true" tabindex="0" data-href="http://example.com/">Fake disabled link</div>Run Code Online (Sandbox Code Playgroud)
请注意,堆栈片段不会打开弹出窗口,因为它们是如何沙箱化的.
而已.这就是这个兔子洞的终点.所有这些疯狂当你可能只是:
<a href="http://example.com/">
...your markup here...
</a>
Run Code Online (Sandbox Code Playgroud)
我在这里发布的代码可能有问题.它可能有一些甚至我还没有意识到的错误.试图复制哪些浏览器免费提供给您是很困难的.有很多细微差别很容易被忽视,因此在99%的情况下试图模仿它是不值得的.
不要做.
<A>NCHOR</a>.<DIV>变成一个链接,使用"Javascript"来包装<DIV>内部<A>NCHOR</A><DIV>使用onclick事件处理程序执行某些操作,请不要将其称为"链接".<div style="cursor:pointer" onclick="document.location='http://www.google.com'">Content Goes Here</div>
Run Code Online (Sandbox Code Playgroud)
<div style="cursor:pointer;" onclick="document.location='http://www.google.com'">Foo</div>
Run Code Online (Sandbox Code Playgroud)