Как получить index изображения?
Как получить index изображения, например вот так, но почему-то index иногда выдает не верное число, почему? ТО есть выдает index элемента в div а не в общем body.
<script type="text/javascript"> $(function(){ $('.img').click(function(){ alert($(this).index()+1); return false; }); }); </script> <div class="text"> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="1.jpg" /></a> </div> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="2.jpg" /></a> <a href="" class="img"><img src="3.jpg" /></a> </div> </div> |
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <div class="text"> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="1.jpg" /></a> </div> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="2.jpg" /></a> <a href="" class="img"><img src="3.jpg" /></a> </div> </div> <script type="text/javascript"> $(function(){ $('img').click(function(){ alert(parseInt($(this).attr('src'))); return false; }); }); </script> jQuery объект - это массив, добавив к нему index в данном случае вы получаете номер элемента. Во втором диве $('img').lenght = 2 вот вы и получаете 1-й и второй соответственно. |
tsigel,
а что не возможно получить индексы a.img, как бы считать только эти ссылки? И тем более если src="as.jpg", src="1233.jpg", src="32323sd.jpg", src="asdasdad223.jpg" |
Я вижу 2 простых выхода:
1) После загрузки документа пройтись по всем картинкам/(ссылкам с картинками) и расставить им индексы например в name и далее работать с name как с индексом. 2) При каждом нажатии пробегаться по документу и пересчитывать картинки, пока не дойдете до текущей. |
Более красивый выход - создать объект с картинкой, тогда индекс картинки можно писать сразу в её свойства.
|
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <div class="text"> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="1.jpg" /></a> </div> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="2.jpg" /></a> <a href="" class="img"><img src="3.jpg" /></a> </div> </div> <script type="text/javascript"> var Image = function ($dom, index) { this.$ = $dom; this.$.data('image', this); this.index = index; this.init(); }; Image.prototype.init = function () { this.$.click(this.handlers.click); }; Image.prototype.handlers = { click: function() { var image = $(this).data('image'); alert(image.index); return false; } }; $(function(){ var index = 0; $('.img').each(function() { var image = new Image($(this), index) index++; }) }); </script> |
tsigel, кто вас научил модифицировать прототипы встроенных объектов?
|
danik.js,
Никто не учил. Я осваиваю скрипт 3-й месяц по учебнику с этого сайта. А что, я что-то не так написал? |
tsigel, не стоит изменять прототипы встроенных объектов. По крайней мере не подавайте плохой пример другим.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <div class="text"> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="1.jpg" /></a> </div> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="2.jpg" /></a> <a href="" class="img"><img src="3.jpg" /></a> </div> </div> <script> var $images = $('.img'); var images = $images.toArray(); $images.click(function(e){ var index = images.indexOf(this); alert(index); e.preventDefault(); }); </script> |
Ну объектный подход же всегда лучше, вопрос только в выборе имени переменной/объекта, или я не прав?
Назови я объект, скажем, "Img" или "aImg" вопросов бы не было? |
Упс. А слона то я и не приметил...
Image - встроенный объект, а вы его перезаписываете. Хотя если объявлять его не как глобальный, то вполне можно пользоваться. В любом случае, не нужно писать конструкторы на каждый чих. Объектный подход хорош, но в меру :) |
danik.js,
Спасибо все отлично применил, но вот еще один вопрос не по теме. Почему вы пользуетесь e.preventDefault();. И в чем отличие между e.preventDefault(); и return false; |
Цитата:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title></title> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(document).ready(function () { $(function(){ $('.img').click(function(e){ alert($('.img').index(this)+1); e.preventDefault(); }); }); }); </script> </head> <body> <div class="text"> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> </div> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> </div> </div> </body> </html> |
рони,
Спасибо) |
Да, что-то я намудрил ))
Цитата:
|
Цитата:
Если эта операция будет выполняться на сайте пару раз, то ок, а если это частая операция, то имеет смысл записать их в массив и работать с номером в массиве. |
Цитата:
Вообще, резонно сохранять результат выборки. Итого: $(document).ready(function () { var $img = $('.img'); $img.click(function(e){ alert($img.index(this)+1); e.preventDefault(); }); }); |
Это цифры при работе в ИЕ 7-8 ;)
|
:write: Если уж оптимизировать то невычислять каждый раз индекс а сделать это один раз.
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title></title> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(function(){ $('.img').each(function (index) { $(this).click(function (e) { alert(index+1); e.preventDefault(); }); }); }); </script> </head> <body> <div class="text"> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> </div> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> </div> </div> </body> </html |
рони, только инкремент убери.
|
рони, ваш код неправильно работает! Если нажимать несколько раз на изображение, то index будет увеличиваться ( т.к. alert(++index)) и число будет уже другое, т.е. "неправильное"
|
поправил код
Цитата:
|
итого )))
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title></title> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(function(){ $('.img').each(function (index) { $(this).click(function (i) { return function (e) { alert(i); e.preventDefault(); } }(index+1)); }); }); </script> </head> <body> <div class="text"> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> </div> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> </div> </div> </body> </html> |
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title></title> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(function(){ $('img').click(function () { alert($('img').index(this)) }); }); </script> </head> <body> <div class="text"> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> <div> Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст!Тут какой то текст! <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> <a href="" class="img"><img src="http://javascript.ru/forum/images/smilies/victory.gif" /></a> </div> </div> </body> </html> |
Deff,
??? и где это работает? |
рони,
:) Не читал топик... |
Deff,
в 13 сообщении ваш вариант уже был, сейчас уже битва за производительность ))) |
рони,
:) Кнешн создать массив заранее, но при возможности подгружаемых изо, к примеру Аяксом или в слайдерах - тоже не Айс, нужны точные начальные условия работы со страницей |
Deff,
рони, Я понял, что лучше всего использовать массив, так? |
Я голосую за код из 17-го поста ;)
|
Часовой пояс GMT +3, время: 03:20. |