Я создаю элементы с помощью jQuery и назначая им идентификаторы в процессе. Позже в моем коде я хочу получить доступ к этим элементам через их идентификатор. Однако я не могу это сделать с помощью jQuery. Если я использую только основной JS, он работает. Почему это может быть?
var createTable = function(rows, columns, height, width) {
var $table = $("<table>");
$("body").append($table);
for (var i = 1; i < rows + 1; i++) {
var $tr = $("<tr>");
$table.append($tr);
for (var j = 1; j < columns + 1; j++) {
var $td = $("<td>", { id: i + "." + j });
$td.css("height", height + "px").css("width", width + "px")
.css("border", "1px black solid");
$tr.append($td);
}
}
}
createTable(4, 4, 150, 100);
Не работает:
$("#1.1").css("border", "1px red solid");
Работает:
var onePointOne = document.getElementById("1.1");
onePointOne.style.border = "1px red solid";
Точка имеет особое значение в селекторах: они являются селекторами классов. Вам нужно будет избежать точки, чтобы найти правильный идентификатор:
$('#1\\.1')...
.
оператор обозначает класс, поэтому он будет искать идентификатор 1 и его класс 1, но вы не обращаетесь к ним, кроме вашего идентификатора .
метасимвол, для которого вам нужно использовать слэш для экранирования метасимвола:
$("#1\\.1").css("border", "1px red solid");
Но я бы рекомендовал вам не использовать .
оператора для вашего идентификатора, вы можете назначить его как 1-1
для которого вы можете легко получить доступ, например $('#1-1')
И еще я бы рекомендовал вам не использовать id, начиная с номера.
.
на первом месте!
Попробуйте это, он будет работать:
$("#1\\.1").css("border", "1px red solid !important");