Как получить Элемент DOM от Селектора JQuery

Вы никогда не можете передавать ссылкой в Java, и один из путей, который очевиден, - когда Вы хотите возвратить больше чем одно значение из вызова метода. Рассмотрите следующий бит кода в C++:

void getValues(int& arg1, int& arg2) {
    arg1 = 1;
    arg2 = 2;
}
void caller() {
    int x;
    int y;
    getValues(x, y);
    cout << "Result: " << x << " " << y << endl;
}

Иногда Вы хотите использовать тот же шаблон в Java, но Вы не можете; по крайней мере, не непосредственно. Вместо этого Вы могли сделать что-то вроде этого:

void getValues(int[] arg1, int[] arg2) {
    arg1[0] = 1;
    arg2[0] = 2;
}
void caller() {
    int[] x = new int[1];
    int[] y = new int[1];
    getValues(x, y);
    System.out.println("Result: " + x[0] + " " + y[0]);
}

, Как был объяснен в предыдущих ответах, в Java, Вы передаете указатель на массив как значение в getValues. Это достаточно, потому что метод тогда изменяет элемент массива, и условно Вы ожидаете, что элемент 0 будет содержать возвращаемое значение. Очевидно, можно сделать это другими способами, такими как структурирование кода, таким образом, это не необходимо, или построение класса, который может содержать возвращаемое значение или позволить ему быть установленным. Но простой шаблон, доступный Вам в C++ выше, не доступен в Java.

172
задан Sotomajor 23 September 2011 в 08:13
поделиться

3 ответа

Вы можете получить доступ к необработанному элементу DOM с помощью:

$("table").get(0);

или проще:

$("table")[0];

Однако на самом деле вам не так много нужно (по моему опыту). Возьмите пример с флажком:

$(":checkbox").click(function() {
  if ($(this).is(":checked")) {
    // do stuff
  }
});

более "jquery'ish" и (imho) более лаконичный. Что, если бы вы захотели пронумеровать их?

$(":checkbox").each(function(i, elem) {
  $(elem).data("index", i);
});
$(":checkbox").click(function() {
  if ($(this).is(":checked") && $(this).data("index") == 0) {
    // do stuff
  }
});

Некоторые из этих функций также помогают скрыть различия в браузерах. Некоторые атрибуты могут быть разными. Классический пример - вызовы AJAX. Чтобы сделать это правильно в необработанном Javascript, есть около 7 резервных вариантов для XmlHttpRequest .

261
ответ дан 23 November 2019 в 20:40
поделиться

Изменить: похоже, я ошибался, предполагая, что вы не можете получить элемент. Как уже писали здесь другие, вы можете получить это с помощью:

$('#element').get(0);

Я проверил, что это действительно возвращает элемент DOM, который был сопоставлен.

7
ответ дан 23 November 2019 в 20:40
поделиться

Если вам нужно напрямую взаимодействовать с элементом DOM, почему бы просто не использовать document.getElementById , поскольку, если вы пытаетесь взаимодействовать с определенным элементом, вы, вероятно, знаете идентификатор, поскольку предположение, что имя класса находится только в одном элементе или какой-либо другой вариант, имеет тенденцию быть рискованным.

Но я склонен согласиться с другими, что в большинстве случаев вам следует научиться делать то, что вам нужно, используя то, что jQuery дает вам, поскольку он очень гибкий.

ОБНОВЛЕНИЕ: На основе комментария: Вот сообщение с красивым объяснением: http://www.mail-archive.com/ jquery-en@googlegroups.com /msg04461.html

$(this).attr("checked") ? $(this).val() : 0

Это вернет значение, если оно отмечено, или 0, если это не так.

$ (this) .val () просто обращается к dom и получает атрибут "value" элемента, независимо от того, проверено оно или нет.

1
ответ дан 23 November 2019 в 20:40
поделиться
Другие вопросы по тегам:

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