Проблема с индексом jQuery ()

Должно быть что-то простое, которое я пропускаю. Я пытаюсь получить индекс элемента, но продолжать добираться-1.

HTML:

<div id="rating_boxes">
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
<img src="/img/ratingbox.gif" class="ratingbox" alt="Rate this Speech" />
</div>

jQuery:

$("img.ratingbox").hover(function() {
    var index = $(this).parent().index(this);
            // have also tried $("#rating_boxes").index(this);
            // and $("#rating_boxes").index($(this));
            // and $(this).parent().index($(this));
    alert(index);
    $(this).attr('src', '/img/ratingbox-selected.gif');
}, function() {
    $(this).attr('src', '/img/ratingbox.gif');
});
10
задан Matt McCormick 2 January 2010 в 00:45
поделиться

3 ответа

Рассмотрим одну из функций с открытым исходным кодом. Если вы хотите узнать, как он развернут, загрузите пару подобных проектов с открытым исходным кодом и узнайте из них. Итак, найдите то, что сделано, как у вас, и изучите его источники.

Почему это должно помочь? Дело в том, что проекты с открытым исходным кодом должны иметь возможность легко строить на машинах пользователей . Иначе никто не сможет внести в них свой вклад. Поэтому вся необходимая информация о способах их развертывания обычно включается в файлы INSTALL или РИДМИ в загруженных источниках. Обычно они состоят из нескольких простых шагов. Для этой же цели проверка доступности и версий предпосылок автоматизирована (в настроить скрипты), и иногда такие скрипты даже помогают в их установке.

Обычно ожидается что-то вроде

# Download sources (this line is read from your website)
wget http://myapp.org/myapp-source-2.15.tgz
tar -xzf myapp-source-2.15.tgz
cd myapp-2.15
less INSTALL
# read INSTALL file, where instructions about installing prerequisites are
./configure --help
# Read help, learn about possible options
./configure --prefix=/install/here --without-sound
make
make install

В настоящее время некоторые приложения используют cmake вместо autotools (файл со сценарием configure ).

Я сомневаюсь, что проекты Linux на самом деле требуют NetBeans в качестве системы сборки - это было бы перебором. Но эта IDE, кажется, генерирует makefile, поэтому отправляйте их. Для удобства можно также зафиксировать файлы проектов, специфичные для среды IDE, в репозитории, но это не должно быть основным способом построения программного обеспечения.

Есть еще несколько вещей, которые пользователи ожидают найти в вашем пакете:

  • Информация о лицензировании (обычно в файлах LICENSE и в начале каждого исходного файла)
  • Ссылка на домашнюю страницу проекта (где сообщать об ошибках)
  • Руководство по кодированию (в виде текстового файла)
  • Информация для сопровождающих (как создать версию, как добавить модуль и т.д.)
-121--4904380-

Будучи ленивым я не проверял это, но не должен ли этот труд

private int FindClosest(IEnumerable<int> numbers, int x)
{
    return
        numbers.Aggregate((r,n) => Math.Abs(r-x) > Math.Abs(n-x) ? n
                                 : Math.Abs(r-x) < Math.Abs(n-x) ? r
                                 : r < x ? n : r);
}
-121--3853861-

Я склонен избегать использования индекса () в jQuery 1.3.2 и более ранних версиях, так как он не подходит для использования. Я просто использую

$(this).prevAll().length

, чтобы получить индекс. вызов size () для prevAll () просто возвращает значение свойства length , поэтому я предпочитаю использовать длину напрямую и пропустить вызов дополнительной функции.

Например,

$("img.ratingbox").hover(function() {
    var index = $(this).prevAll().length;
    alert(index);
    $(this).attr('src', '/img/ratingbox-selected.gif');
}, function() {
    $(this).attr('src', '/img/ratingbox.gif');
});

В jQuery 1.4 можно просто вызвать index () для объекта jQuery, чтобы получить индекс первого элемента в объекте.

23
ответ дан 3 December 2019 в 13:51
поделиться

index() возвращает индекс данного элемента со списком элементов, не входящих в состав родительского элемента. Чтобы найти индекс кликнувшего изображения, необходимо найти все изображения, а не parent из всех изображений.

Вы хотите что-то подобное:

// Find all the images in our parent, and then find our index with that set of images
var index = $(this).parent().find("img").index(this);

Вы также используете селектор id вместо селектора класса во 2-м примере. Вместо

$("#rating_boxes").index($(this)); // your way - select by ID

Вы хотите

$(".rating_boxes").index(this); // select by class
11
ответ дан 3 December 2019 в 13:51
поделиться

Если Вы хотите знать положение поля рейтинга, более надежным способом будет использование:

var index = $(this).prevAll('img').size();

т.е. вычислить количество элементов img перед этим элементом. Метод индекса требует, чтобы вы сначала выбрали родительский элемент, а затем все элементы img внутри. Это немного быстрее.

6
ответ дан 3 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: