2013-11-13 3 views
0

JavaScript Новичок. Я узнал только основы. Я создаю игру в JavaScript. Но я не знаю, что означает этот «img». Он используется много раз в коде. И это меня смущает. Пожалуйста, помогите мне.

$("#card div").click(function() { 
    id = $(this).attr("id"); 
    if ($("#"+id+" img").is(":hidden")) { 
     $("#"+id+" img").fadeIn('slow'); 
     if (imageopen == "") { 
      showimg = id; 
      imageopen = $("#"+id+" img").attr("src"); 
     } 
    } 
}); 
+1

'img' - это тег изображения, он ищет потомков' img' элемента, который вы нажали. Хотя '$ (this) .find ('img'). Is (': hidden')' будет иметь одинаковые результаты – rorypicko

+2

Не обязательно, 'find ('img')' будет эквивалентным, 'children()' ограничен только для поиска непосредственных дочерних элементов элемента. –

+0

Ах, да, спасибо. комментарий обновлен. – rorypicko

ответ

2

Это плохой код.

id = $(this).attr("id"); 
if ($("#"+id+" img").is(":hidden")) 

Это означает, что получить id элемента, которая была нажата. Представим себе, что id был строкой foobar. Затем мы создаем строку, которая выглядит как #foobar img. То есть строки объединяются (это называется конкатенацией). Они используются для создания селектора jQuery, который находит img элементов в пределах #foobar.

Это плохой способ сделать это. Простой способ заключается в использовании find метод JQuery в:

var img = $(this).find('img'); 
if (img.is(':hidden')) { 
    img.fadeIn('slow'); 

    // etc 
} 

Стоит также отметить, что $(this).attr('id') является всегда плохая идея. Разумеется, вам действительно не нужно значение id, чтобы делать то, что вы делаете, но это полезно для справок в будущем. this - ссылка на элемент, который был нажат. Вы можете получить доступ к свойству id элемента, выполнив this.id. Он вернется точно так же, как и $(this).attr('id'), но более эффективно.

+0

Также 'this.id' (я знаю * вы * знаете, ОП, я полагаю, не делает). @rain: внутренне jQuery реализует 'find()', сохранение не будет происходить с использованием контекста. –

+0

@ raina77ow Ну, это работает, но, на мой взгляд, оно менее интуитивное и явное. Более того, это точно так же за кулисами. – lonesomeday

+0

Стоит отметить, что причина, по которой это более эффективно (сохранение элемента DOM в переменной), заключается в том, что без него JavaScript должен каждый раз искать дерево dom. – rorypicko

0

img является HTML тег <img src="" alt=""/> содержится в DOM элемента #id

0

$("#"+id+" img") означает, что вы ищете тег <img> внутри тега контейнера с идентификатором #id

0
$("#"+id+" img") 

является:

$("#56 img") 

, где 56 будет быть id attr любого тега, дети id=card тега.

И это ссылки:

<anytag id=56><img ...> 

Собственно, упоминание о img тег выше.

Конечно, .is(":hidden") возвращает true, если ссылочный тег скрыт (display: hidden;).