Приветствую вас. Я узнал только основы. Я создаю игру в 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");
}
}
});
Это плохой код.
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')
, но более эффективно.
this.id
(я знаю, вы знаете, OP, я думаю, нет). @rain: внутренне в jQuery реализована функция find()
, для которой не нужно сохранять данные в контексте.
img
- это тег HTML <img src="" alt=""/>
содержащийся в элементе DOM #id
$("#"+id+" img")
означает, что вы ищите тег <img>
внутри тега контейнера с id #id
$("#"+id+" img")
является:
$("#56 img")
где 56 будет id attr
любого тега, дочерними элементами id=card
.
И это указывает:
<anytag id=56><img ...>
Фактически, ссылается на тег img
выше.
Конечно, .is(":hidden")
возвращает true, если ссылочный тег скрыт (display: hidden;
).
img
- это тег изображения, он ищет потомковimg
элемента, по которому вы щелкнули. Хотя$(this).find('img').is(':hidden')
будет иметь те же результатыfind('img')
будет эквивалентен,children()
ограничен только поиском непосредственных потомков элемента.