Как узнать положение элемента
Есть список:
<ul id='ul'> <li>select 1</li> <li>select 2</li> <li>select 3</li> <li>select 4</li> <li>select 5</li> </ul> При нажатии на один из элементов, мне нужно узнать какой он по счету. |
Цитата:
|
Да мне вот как раз то вообще ничего особо в голову не лезет.
У меня вот такая функция есть
var ul=document.getElementById('ul');
var li=ul.getElementsByTagName('li');
for(xx=0; xx<=li.length-1; xx++){
ul.getElementsByTagName('li')[xx].onclick=function (){
rad(this)
};
};
function rad(thiss){
thiss.????
// Можно ли как нибудь так это реализовать
}
|
Цитата:
Я расставляю перед тобой в ряд N кубиков... Потом тучу пальцем в некий кубик и спрашиваю: - Какой он посчёту? Что тебе нужно сделать дабы ответить на мой вопрос? :) |
Любишь играть.... ))
Буду считать с начала ряда.
....
for(xx=0; xx<=li.length-1; xx++){
// Как узнать где остановиться? (в какой ты кубик пальцем ткнул)
if(ul.getElementsByTagName('li')[xx]=='?') {}
};
|
\вариант
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
body { margin:0px; }
</style>
<script type="text/javascript">
function l(event) {
var el = event.target || event.srcElement;
alert(el.innerHTML);
}
</script>
</head>
<body>
<ul onclick="l(event)">
<li>select 1</li>
<li>select 2</li>
<li>select 3</li>
<li>select 4</li>
<li>select 5</li>
</ul>
</body>
</html>
|
... и тут появился nerv.
|
Magneto, :) Я тоже учусь) Поэтому пока мне это интересно)
|
Ну можно было решить и выложить уже после того как топикстартер решил свою проблемку.
|
Цитата:
Цитата:
|
как мне узнать позицию элемента li (на какой из 5 элементов я нажал)
|
nerv_, таки ты так же не решил задачку автора... :) Ты не вывел порядковый номер элемента в списке. ;) Вот смотри, я немного поменял содержимое
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
body { margin:0px; }
</style>
<script type="text/javascript">
function l(event) {
var el = event.target || event.srcElement;
alert(el.innerHTML);
}
</script>
</head>
<body>
<ul onclick="l(event)">
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
</ul>
</body>
</html>
И уже не понятно что ты там нашел... :) |
Цитата:
Если твой - вывести значение итерационной переменной и закончить таки цыкл. :) |
if (ul.getElementsByTagName('li')[xx]==this.???){...}
Я хотя бы в правильную сторону мыслю? |
nerv_ молодец уже в том, что делает полные тестовые примеры, ане как -=1100=- какие-то огрызки...
|
Цитата:
А вот синтаксис хромает на все четыре копыта... :) И над оптимизацией нужно работать... ;) |
Цитата:
Цитата:
Цитата:
|
у меня получилось так
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
body { margin:0px; }
</style>
<script type="text/javascript">
function l(event) {
var elLi = event.target || event.srcElement;
var elUl = elLi.parentNode.childNodes;
for(var j = 0, i = 0; j < elUl.length; j++) {
if(elUl.item(j).nodeName === "LI") {
i++;
if(elUl.item(j) === elLi) break;
}
}
alert(i);
}
</script>
</head>
<body>
<ul onclick="l(event)">
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
</ul>
</body>
</html>
|
Цитата:
<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function l(Obj,event) {
var elLi = event.target || event.srcElement;
var o = Obj.getElementsByTagName('li');
for (var j = 0; j < o.length; j++) {
if(o[j] === elLi) {
alert(j+1);
break;
}
}
}
</script>
</head>
<body>
<ul onclick="l(this,event)">
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
</ul>
</body>
</html>
|
ksa, спасибо! Понял, где можно было упростить. Почему-то эта запись
var elUl = elLi.parentNode.childNodes; в FF помимо Li влючала еще элементы (всего 11 для списка из 5). Сделал по Вашему примеру.
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
body { margin:0px; }
</style>
<script type="text/javascript">
function l(event) {
var x = event.target || event.srcElement;
var j = x.parentNode.getElementsByTagName('li');
for(var i = 0; i < j.length; i++) {
if(j[i] === x) break;
}
alert(++i);
}
</script>
</head>
<body>
<ul onclick="l(event)">
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
</ul>
</body>
</html>
|
Красивее так:
<!DOCTYPE HTML>
<html>
<body>
<ul>
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
<li>select *</li>
</ul>
</body>
<script type="text/javascript">
(function(){
var ul=document.getElementsByTagName('ul')[0],
li=ul.getElementsByTagName('li');
ul.onclick=function(e) {
var t = e.target || event.srcElement,i=li.length;
while(i--&&li[i]!==t);
alert(i)
}
})()
</script>
</html>
...
functon(event){
var el = event.target || event.srcElement;
...
опасно так делать, опасно. |
Цитата:
|
Aetae, в IE8 не работает. Ругается на эту строчку
var t = e.target || event.srcElement; // 'target' - есть null или не является объектом Цитата:
ksa, да, они текстовые Еноты :D |
Вариант на jQuery ...
Узнать порядковый номер элемента |
Цитата:
(function(){
var ul=document.getElementsByTagName('ul')[0],
li=ul.getElementsByTagName('li');
ul.onclick=function(e) {
var t = *!*e.target*/!* || event.srcElement,i=li.length;
while(i--&&li[i]!==t);
alert(i)
}
})()
так тоже опасно. в ie e будет undefined и обращение к target вызовет ошибку. |
Самдурак, вас поругал, а сам скопипэйстил.))
На самом деле там должно быть: var t = e?e.target:window.event.srcElementВсю жисть так делал а тут прошляпил. Наглядный пример вреда копипэйста.) |
| Часовой пояс GMT +3, время: 15:18. |