#javascript #html #dom
#javascript #HTML #dom
Вопрос:
Я пытаюсь изменить innerHTML div при нажатии. Я динамически сгенерировал массив divs, и я хочу получить конкретный доступ к таблице, на которую нажал пользователь.
Я попытался динамически задавать идентификатор таблиц в коде JavaScript:
(for var i=0;i<array.length;i ){
var IDvalue = "foo";
// append table to HTML string.
html = "<div onclick='modifyInnerHTML("" IDvalue "")'>...</div>";
var divs = document.getElementsByTagName('div');
divs[divs.length-1].id=array[i].IDvalue;
}
Затем в modifyInnerHTML()
Я получаю доступ к элементу по идентификатору:
function modifyInnerHTML(id){
document.getElementById(id).innerHTML ="Add an update";
}
Хотя я думаю, что этот код должен работать нормально, он нарушает document.getElementById(id)
функцию, и я понимаю, что идентификатор divs не задается динамически. Любые мысли о том, почему это может быть или есть более быстрые способы сделать это?
Заранее спасибо!
Комментарии:
1. Что вы подразумеваете под
divs[divs.length-1].id=array[i].IDvalue;
этим, мне кажется неправильным.2. Не могли бы вы более точно описать конечный результат, которого вы пытаетесь достичь?
3. Я пытаюсь изменить innerHTML div, на который нажимает пользователь — довольно просто 🙂
4. @addy2012 Это для присвоения IDvalue последнему div в документе
5. @wagtail да, но я не знал, что
array[i].IDvalue
синтаксис работает.
Ответ №1:
Для этого лучше использовать библиотеку манипуляций с DOM, например jQuery.
Что касается событий, jQuery позволит вам определять их гораздо более надежным способом. В любом случае вам следует избегать определения обработчиков событий в атрибутах, лучше прикрепите их к DOM, используя ссылки на элементы или, что еще лучше, наборы элементов jQuery.
Случай 1: Сгенерируйте некоторые divs
динамически с уже установленным обработчиком событий:
for(var i = 0; i < 10; i) {
$("<div>")
.addClass("clickable-div")
.html("click me!")
.on("click", function() {
$(this).html("You clicked me!");
})
.appendTo("body");
}
Случай 2. добавьте обработчик событий ко всем div
s, которые содержат класс clickable-div
$("div.clickable-div").on("click", function() {
$(this).html("You clicked me!");
});
С помощью jQuery все делается намного быстрее, чем с тем, что вы написали бы на чистом JS.
Комментарии:
1. Хорошо, есть ли более быстрый способ использования jQuery, чем тот, который я использовал (или пытался использовать) в JavaScript?
2. Да, я попытаюсь выяснить, что вы действительно хотели здесь сделать, и перевести это в jQuery.
3. Хорошо, я думаю, что видел это раньше! Я это осуществлю!!
4. Найдите время, чтобы внимательно прочитать документы. Это сэкономит вам огромное количество времени в дальнейшем.