Javascript и CSS, используя тире
Я начинаю изучать javascript и понимаю, что тире не разрешены при именовании идентификаторов. Однако в CSS обычно используется тире для идентификаторов и классов.
каким-то образом использование тире в CSS мешает взаимодействию javascript? Например, если бы я использовал getElementByID ("css-dash-name"). Я пробовал несколько примеров использования getElementByID с тире в качестве имени для идентификатора div, и это сработало, но я не уверен, что это так во всех других контекст.
7 ответов
имея тире и подчеркивания в идентификаторе (или имени класса, если вы выберете это), которые не будут иметь никакого отрицательного эффекта, безопасно их использовать. Ты просто не могу сделать что-то вроде:
var some-element = document.getElementByID('css-dash-name');
приведенный выше пример приведет к ошибке, потому что в переменной, которой вы назначаете элемент, есть тире.
следующее Было бы хорошо, хотя, поскольку переменная не содержит тире:
var someElement = document.getElementByID('css-dash-name');
это ограничение именования только существует для самих переменных javascript.
только в тех случаях, когда вы можете получить доступ к элементам как свойствам, это имеет значение. Например, поля формы:
<form>
<input type="text" name="go-figure" />
<input type="button" value="Eat me!" onclick="...">
</form>
в событии onclick вы не можете получить доступ к текстовому полю как свойству, так как тире интерпретируется как минус в Javascript:
onclick="this.form.go-figure.value='Ouch!';"
но вы все равно можете получить доступ к нему через строку:
onclick="this.form['go-figure'].value='Ouch!';"
всякий раз, когда вам нужно обратиться к свойству CSS в качестве имени переменной JavaScript, CamelCase является официальным способом.
element.style.backgroundColor = "#FFFFFF";
вам никогда не придется обращаться к идентификатору элемента как к имени переменной. Он всегда будет в строчке, так что
document.getElementById("my-id");
всегда будет работать.
Использование Hypen (или черточки) ОК
Я тоже в настоящее время изучаю JavaScript, и насколько я читал книгу Дэвида Фланагана (JavaScript: окончательное руководство, 5-е издание)
идентификаторы могут содержать дефисы:
- ID и имя маркеры должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисов ( " - " ), подчеркиваний ("_"), двоеточий ( " :") и периодов (".").
и нет никаких ограничений при использовании идентификаторов в JavaScript, кроме случаев, когда вы хотите ссылаться на элементы в глобальной области. Там вам нужно использовать:
window['css-dash-name']
нет, это не вызовет проблемы. Вы получаете доступ к идентификатору в виде строки (она заключена в кавычки), поэтому тире не представляет проблем. Однако, я бы предложил не использовать документ.getElementById ("css-dash-name"), а вместо этого используя jQuery, Так что вы можете сделать:
$("#css-dash-name");
что гораздо понятнее. документация jQuery также довольно хороша. Это лучший друг веб-разработчиков.
другие ответы верны, насколько вы можете и не можете использовать дефисы, однако в корне вопроса Вы должны рассмотреть идею не использовать тире/дефисы в именах переменных/классов/идентификаторов. Это не стандартная практика, даже если она работает и требует тщательного кодирования, чтобы использовать ее.
рассмотрите возможность использования PascalCase (все слова начинаются с заглавной буквы) или camelCase (первое слово начинается в нижнем регистре, после слов в верхнем регистре). Эти двое наиболее распространенные, принятые соглашения об именах.
различные ресурсы будут рекомендовать различные варианты между ними (за исключением JavaScript, который в значительной степени всегда рекомендуется camelCase). В конце концов, пока вы последовательны в своем подходе, это самая важная часть. Использование camel или Pascal case гарантирует, что вам не придется беспокоиться о специальных аксессуарах или скобках в вашем коде.
для соглашений JavaScript попробуйте следующее вопрос/обсуждение:
соглашения об именах javascript
вот еще одно отличное обсуждение соглашений для CSS, Html-элементов и т. д.:
каков наилучший способ назвать идентификаторы и классы в CSS и HTML?