2013-03-11 84 views
0

是否有可能仅使div的一部分可点击 - 就像clickmap/imagemap一样?可能与jQuery? 提示:我不想编辑html(误用200个单独的html文件的模板)。jQuery或任何:可能只使div的一部分可点击?

+0

这是非常有可能的 - 看看第一个例子:http://www.w3schools.com/tags /tag_map.asp – spots 2013-03-11 13:05:29

回答

5

当您点击div时,事件处理程序会收到事件,因此您可以测试点击的位置。

如果需要,您可能需要使用单击的元素位置和大小,使用$(this).offset(),$(this).width()$(this).height()。例如:

$('mydivselector').click(function(e) { 
    if (e.pageY > $(this).offset().top + 0.5*$(this).height()) { 
      // bottom was clicked 

    } else { 
      // up of the div was clicked 

    } 
}); 

如果要防止默认操作和事件传播,请从事件处理函数返回false。

+0

您应该展示如何防止对那些不应点击的区域采取默认操作 – 2013-03-11 13:20:56

+0

这些区域无法获取操作。问题是,smb。想要标记一个文本,他们是“连续”作为答题器 – Viktor 2013-03-11 13:39:07

+0

这工作得很好,IE,FF,Safari - 非常感谢你! – Viktor 2013-03-11 15:23:41

0

您可能需要使整个div可点击,然后通过检查单击哪个坐标来确定是否要处理该事件。

0

您可以检查event object上的offsetXoffsetY属性的值,如果不喜欢它们,则决定不做任何事情。

Example

另外,如果你需要单击事件并不火,你可以动态地创建额外的透明<div> S和部分地将它们放置在现有元素的面前,让他们掩盖了部分你不想回应点击。

+0

动态div注射对于seo来说是不好的做法,不是吗? – Viktor 2013-03-11 13:40:00

+1

@Viktor:我不知道,因为我们所说的divs将会是空的,我不知道它会如何影响seo。 – Jon 2013-03-11 13:43:15

1

你可以尝试让所有元素的jQuery选择,并切一些

var selector = "#mydiv"; 
var numberOfElements = $(selector).find('*').length/2; //It's just an example 

$(selector).find('*').slice(0, numberOfElements).click(function() { 
[....]//do stuff 
}); 
+0

所以我在相同大小的切片中切片这个div?好主意! – Viktor 2013-03-11 13:41:43

+0

不,这只是一个想法,而这只是允许你分割一些元素(HTML标签)。它不考虑元素的偏移量。在我的例子中,我搜索HTML树的中间部分。 – JoDev 2013-03-11 14:09:58