Если оговорка о проблеме с img Generation - PullRequest
0 голосов
/ 15 апреля 2011

Сценарий выглядит следующим образом;

$("#Results a").live('dblclick', function(event){
    var src = $(this).attr("href");
    if (event.type === 'dblclick') {
        if ($(this).hasClass(".A")) {
            $('<img />', {'src': src,'class': 'Box'}).wrap('<div class="Packet" />').parent().insertAfter($('.Spot_A').parent());
        } else if ($(this).hasClass(".B")) {
            $('<img />', {'src': src,'class': 'Box'}).wrap('<div class="Packet" />').parent().insertAfter($('.Spot_B').parent());
        }
    }
});

Я дважды щелкаю по тегу ссылки, чтобы создать элемент img, который использует href ссылки для src изображения и размещает это img где-то конкретно, основываясь на классе, который имел элемент link. Часть создания элемента img работает отлично. Тем не менее, сейчас я пытаюсь «отсортировать» различные imgs в зависимости от того, к какому классу относится тег link. Вот где у меня проблемы. Мне кажется совершенно очевидным, как это должно происходить, но это не работает.

Я подумал, что это должно быть просто: Когда я дважды щелкаю ссылку, если эта (ссылка) имеет класс _ _, создайте изображение ЗДЕСЬ. Если класс diff, то создайте img ЗДЕСЬ. Обратите внимание, что ссылки ни в коем случае не удаляются.

.Parent / inserttafter / parent часть необходима, потому что она является частью того, как определяется размещение в иерархии. Spot_A / B является отправной точкой, и это ключ к сортировке.

1 Ответ

4 голосов
/ 15 апреля 2011

.hasClass() принимает имя класса, а не селектор класса.Удалите точки.

if ($(this).hasClass("A")) {
    // stuff
} else if ($(this).hasClass("B")) {
    // other stuff
}

Предоставление полной очистки:

$('#Results a').live('dblclick', function(event) {
    var $this = $(this),
        src = $this.attr('href'),
        target = $this.hasClass('A') ? '.Spot_A'
               : $this.hasClass('B') ? '.Spot_B'
               : null;

    if (target) {
        $(target).parent().after($('<div class="Packet"></div>').append($('<img />', {'src': src, 'class': 'Box'})));
    }
});
  • Не повторяйте многократно this, сохраняйте $(this) в локальной переменной
  • Нет необходимости проверять event.type === 'dblclick'
  • Быть совместимым с одинарными и двойными кавычками
  • Оставаться сухим
  • Это больше вопрос личных предпочтений, но простой случай if-else можно записать более кратко с помощью двух наборов троичных операторов
  • Согласно документам jQuery , теги, которые могут содержать другие элементы, должны быть связаны с закрывающим тегом(при использовании $() для создания новых элементов)
  • Очистить вызовы создания элемента
...