У меня есть следующая манекена html-разметки:
<table>
<body>
<tr>
<td id="cell" style="height: 1000px; width: 200px;"></td>
</tr>
</body>
</table>
Мне нужно подписаться на событие click на ячейке и получить верхнюю смещенную относительную родительскую таблицу (tr).
jQuery('#cell', function (e) {
// get top offset in pixels relative parent tr element
});
Какой лучший способ?
Изменить: я имею в виду, мне нужно получить смещение мышью относительно элемента tr
Предполагая, что я правильно понял ваш вопрос, этот код должен сделать трюк. Он просто выводит координаты мыши x, y относительно контейнера соты. Выходное предупреждение запускается щелчком мыши по ячейке.
o = $("#cell");
o.click(
function (e) {
offsetX = e.pageX - o.position().left;
offsetY = e.pageY - o.position().top;
alert('offsetX: ' + offsetX + '\noffsetY:' + offsetY);
}
);
Наверное, это..?
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Documento senza titolo</title>
<style>
table{
border-collapse:collapse;
width:200px;
position:relative;
}
table tr{width:200px;float:left;background-color:red;position:relative;}
table tr td{width:100px;background-color:red;}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
//if you want offset from tr
$('td').click(function(){
var leftParent=$(this).parent('tr').offset().left
var topParent=$(this).parent('tr').offset().top
var left=Math.round(($(this).offset().left)-leftParent);
var top=Math.round(($(this).offset().top)-topParent)
alert('top'+top+' left'+left)
})
//if you want offset from table
$('td').click(function(){
var leftParent=$(this).parents('table').position().left
var topParent=$(this).parents('table').position().top
var left=Math.round(($(this).offset().left)-leftParent);
var top=Math.round(($(this).offset().top)-topParent)
alert('top'+top+' left'+left)
})
})
</script>
</head>
<body>
<table>
<tr>
<td class="cell">aaa</td>
<td class="cell">bbb</td>
</tr>
<tr>
<td class="cell">ccc</td>
<td class="cell">ddd</td>
</tr>
<tr>
<td class="cell">eee</td>
<td class="cell">fff</td>
</tr>
</table>
</body>
</html>
$('#cell').position().top
должен получить то, что вы хотите.