Это пример кода для wiki answer в vb.net , если предположить, что Option Strict On
и Option Infer On
.
INSERT
Dim sql = "INSERT INTO myTable (myField1, myField2) " &
"VALUES (@someValue, @someOtherValue);"
Using cmd As New SqlCommand(sql, myDbConnection)
cmd.Parameters.AddWithValue("@someValue", someVariable)
cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text)
cmd.ExecuteNonQuery()
End Using
UPDATE
Dim sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;"
' see above, same as INSERT
SELECT
Dim sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;"
Using cmd As New SqlCommand(sql, myDbConnection)
cmd.Parameters.AddWithValue("@someValue", someVariable)
Using reader = cmd.ExecuteReader()
' ...
End Using
' Alternatively: Dim result = cmd.ExecuteScalar()
' if you are only interested in one value of one row.
End Using
Современные браузеры добавили classList , который предоставляет методы, позволяющие упростить управление классами, не требуя библиотеки:
document.getElementById("MyElement").classList.add('MyClass');
document.getElementById("MyElement").classList.remove('MyClass');
if ( document.getElementById("MyElement").classList.contains('MyClass') )
document.getElementById("MyElement").classList.toggle('MyClass');
К сожалению, они не работают в Internet Explorer до версии 10, хотя есть shim , чтобы добавить поддержку для IE8 и IE9, доступных с на этой странице .
Стандартный способ JavaScript для выбора элемента использует . document.getElementById("Id")
, что и используются в следующих примерах: вы можете, конечно, получить элементы другими способами, и в правильной ситуации можно просто использовать this
вместо этого, однако, вдаваясь в подробности, это выходит за рамки ответа.
Чтобы заменить все существующие классы одним или несколькими новыми классами, установите атрибут className:
document.getElementById("MyElement").className = "MyClass";
(Вы можете использовать список с разделителями-пробелами для применения нескольких классов.)
Чтобы добавить класс к элементу, без удаление / изменение существующих значений, добавление пробела и нового имени класса, например:
document.getElementById("MyElement").className += " MyClass";
Чтобы удалить один класс для элемента , не затрагивая другие потенциальные классы, требуется простая замена регулярного выражения:
document.getElementById("MyElement").className =
document.getElementById("MyElement").className.replace
( /(?:^|\s)MyClass(?!\S)/g , '' )
/* Code wrapped for readability - above is all one statement */
Объяснение этого регулярного выражения выглядит следующим образом:
(?:^|\s) # Match the start of the string, or any single whitespace character
MyClass # The literal text for the classname to remove
(?!\S) # Negative lookahead to verify the above is the whole classname
# Ensures there is no non-space character following
# (i.e. must be end of string or a space)
Флаг g
сообщает, что замена повторяется по мере необходимости, в случае, если имя класса добавлено несколько times.
Те же регулярные выражения, которые использовались выше для удаления класса, также могут использоваться в качестве проверки того, является ли конкретный класс существует:
if ( document.getElementById("MyElement").className.match(/(?:^|\s)MyClass(?!\S)/) )
Хотя можно писать JavaScript непосредственно внутри атрибутов событий HTML (например, onclick="this.className+=' MyClass'"
), это не рекомендуется. Особенно в больших приложениях более удобный код достигается путем разделения HTML-разметки на логику взаимодействия JavaScript.
Первым шагом к достижению этого является создание функции и вызов функции в атрибуте onclick, например:
<script type="text/javascript">
function changeClass(){
// Code examples from above
}
</script>
...
<button onclick="changeClass()">My Button</button>
(Не требуется иметь этот код в тегах сценария, это просто для краткости примера, и в том числе JavaScript в отдельном файле может быть более уместным.)
Второй шаг - переместить событие onclick из HTML и в JavaScript, например, используя addEventListener
<script type="text/javascript">
function changeClass(){
// Code examples from above
}
window.onload = function(){
document.getElementById("MyElement").addEventListener( 'click', changeClass);
}
</script>
...
<button id="MyElement">My Button</button>
(Обратите внимание, что требуется часть window.onload, чтобы содержимое этой функции было исполнено после , когда HTML закончил загрузку - без этого, MyElement может не существовать при вызове кода JavaScript, так что строка будет терпеть неудачу .)
Вышеприведенный код находится в стандартном JavaScript, однако он распространен активировать использование структуры или библиотеки для упрощения общих задач, а также воспользоваться фиксированными ошибками и крайними случаями, которые вы, возможно, не придумали при написании кода.
В то время как некоторые люди считают излишним добавить a ~ 50 & nbsp; KB framework для простого изменения класса, если вы выполняете какую-либо значительную работу JavaScript или что-то, что может иметь необычное поведение в кросс-браузере, стоит рассмотреть.
(Очень грубо говоря, библиотека представляет собой набор инструментов, предназначенных для конкретной задачи, в то время как структура обычно содержит несколько библиотек и выполняет полный набор обязанностей.)
Приведенные выше примеры были воспроизведены ниже, используя jQuery , возможно, наиболее часто используемую библиотеку JavaScript (хотя есть и другие, заслуживающие изучения).
(Обратите внимание, что $
здесь объект jQuery.)
$('#MyElement').addClass('MyClass');
$('#MyElement').removeClass('MyClass');
if ( $('#MyElement').hasClass('MyClass') )
Кроме того, jQuery предоставляет ярлык для добавления класса, если он не применяется, или удаление класса, который делает:
$('#MyElement').toggleClass('MyClass');
$('#MyElement').click(changeClass);
или без необходимости использования идентификатора :
$(':button:contains(My Button)').click(changeClass);
ОК, я думаю, что в этом случае вы должны использовать jQuery или написать свои собственные методы в чистом javascript, мое предпочтение заключается в добавлении моих собственных методов вместо того, чтобы вводить все jQuery в мое приложение, если мне это не нужно по другим причинам.
Я хотел бы сделать что-то вроде ниже в качестве методов для моей инфраструктуры javascript, чтобы добавить несколько функций, которые обрабатывают добавление классов, удаление классов и т. д., аналогичные jQuery, это полностью поддерживается в IE9 +, также мой код написан в ES6, поэтому вам нужно убедиться, что ваш браузер поддерживает его или вы используете что-то вроде babel, иначе вам нужно использовать синтаксис ES5 в вашем коде, также таким образом мы находим элемент через идентификатор, что означает, что элемент должен иметь идентификатор для выбора:
//simple javascript utils for class management in ES6
var classUtil = {
addClass: (id, cl) => {
document.getElementById(id).classList.add(cl);
},
removeClass: (id, cl) => {
document.getElementById(id).classList.remove(cl);
},
hasClass: (id, cl) => {
return document.getElementById(id).classList.contains(cl);
},
toggleClass: (id, cl) => {
document.getElementById(id).classList.toggle(cl);
}
}
, и вы можете просто вызвать их использование, как показано ниже, представьте, что ваш элемент имеет идентификатор «id» и класс «class», убедитесь, что вы передаете их как строку, вы может использовать утилиту, как показано ниже:
classUtil.addClass('myId', 'myClass');
classUtil.removeClass('myId', 'myClass');
classUtil.hasClass('myId', 'myClass');
classUtil.toggleClass('myId', 'myClass');
Чтобы добавить информацию из другой популярной структуры, Google Closures, см. их класс dom / classes :
goog.dom.classes.add(element, var_args)
goog.dom.classes.addRemove(element, classesToRemove, classesToAdd)
goog.dom.classes.remove(element, var_args)
. Для выбора элемента используется один параметр goog.dom.query с селектором CSS3:
var myElement = goog.dom.query("#MyElement")[0];
Вот toggleClass для переключения / добавления / удаления класса в элементе:
// If newState is provided add/remove theClass accordingly, otherwise toggle theClass
function toggleClass(elem, theClass, newState) {
var matchRegExp = new RegExp('(?:^|\\s)' + theClass + '(?!\\S)', 'g');
var add=(arguments.length>2 ? newState : (elem.className.match(matchRegExp) == null));
elem.className=elem.className.replace(matchRegExp, ''); // clear all
if (add) elem.className += ' ' + theClass;
}
см. jsfiddle
также см. мой ответ здесь для динамического создания нового класса
В одном из моих старых проектов, которые не использовали jQuery, я построил следующие функции для добавления, удаления и проверки, если элемент имеет класс:
function hasClass(ele, cls) {
return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}
function addClass(ele, cls) {
if (!hasClass(ele, cls)) ele.className += " " + cls;
}
function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
ele.className = ele.className.replace(reg, ' ');
}
}
Так, например, если я хочу onclick, чтобы добавить некоторый класс, я могу использовать эту кнопку:
<script type="text/javascript">
function changeClass(btn, cls) {
if(!hasClass(btn, cls)) {
addClass(btn, cls);
}
}
</script>
...
<button onclick="changeClass(this, "someClass")">My Button</button>
К настоящему времени наверняка было бы лучше использовать jQuery.
Вы можете использовать node.className
следующим образом:
document.getElementById('foo').className = 'bar';
Это должно работать в IE5.5 и выше в соответствии с PPK .
Вы можете попытаться использовать свойство node attributes
, чтобы поддерживать совместимость со старыми браузерами даже в IE6:
function getClassNode(element) {
for (var i = element.attributes.length; i--;)
if (element.attributes[i].nodeName === 'class')
return element.attributes[i];
}
function removeClass(classNode, className) {
var index, classList = classNode.value.split(' ');
if ((index = classList.indexOf(className)) > -1) {
classList.splice(index, 1);
classNode.value = classList.join(' ');
}
}
function hasClass(classNode, className) {
return classNode.value.indexOf(className) > -1;
}
function addClass(classNode, className) {
if (!hasClass(classNode, className))
classNode.value += ' ' + className;
}
document.getElementById('message').addEventListener('click', function() {
var classNode = getClassNode(this);
var className = hasClass(classNode, 'red') && 'blue' || 'red';
removeClass(classNode, 'red');
removeClass(classNode, 'blue');
addClass(classNode, className);
})
.red {
color: red;
}
.red:before {
content: 'I am red! ';
}
.red:after {
content: ' again';
}
.blue {
color: blue;
}
.blue:before {
content: 'I am blue! '
}
<span id="message" class="">Click me</span>
Это проще всего с библиотекой jQuery:
<input type="button" onClick="javascript:test_byid();" value="id='second'" />
<script>
function test_byid()
{
$("#second").toggleClass("highlight");
}
</script>
Также вы можете расширить объект HTMLElement, чтобы добавить методы для добавления, удаления, переключения и проверки классов ( gist ):
HTMLElement = typeof(HTMLElement) != 'undefiend' ? HTMLElement : Element;
HTMLElement.prototype.addClass = function(string) {
if (!(string instanceof Array)) {
string = string.split(' ');
}
for(var i = 0, len = string.length; i < len; ++i) {
if (string[i] && !new RegExp('(\\s+|^)' + string[i] + '(\\s+|$)').test(this.className)) {
this.className = this.className.trim() + ' ' + string[i];
}
}
}
HTMLElement.prototype.removeClass = function(string) {
if (!(string instanceof Array)) {
string = string.split(' ');
}
for(var i = 0, len = string.length; i < len; ++i) {
this.className = this.className.replace(new RegExp('(\\s+|^)' + string[i] + '(\\s+|$)'), ' ').trim();
}
}
HTMLElement.prototype.toggleClass = function(string) {
if (string) {
if (new RegExp('(\\s+|^)' + string + '(\\s+|$)').test(this.className)) {
this.className = this.className.replace(new RegExp('(\\s+|^)' + string + '(\\s+|$)'), ' ').trim();
} else {
this.className = this.className.trim() + ' ' + string;
}
}
}
HTMLElement.prototype.hasClass = function(string) {
return string && new RegExp('(\\s+|^)' + string + '(\\s+|$)').test(this.className);
}
И тогда просто используйте (этот клик добавит или удалит класс):
document.getElementById('yourElementId').onclick = function() {
this.toggleClass('active');
}
Здесь demo .
Без обид, но нескромно менять класс «на лету», поскольку он заставляет интерпретатор CSS пересчитывать визуальное представление всей веб-страницы.
Причина в том, что это почти невозможно для интерпретатор CSS, чтобы узнать, может ли быть изменено какое-либо наследование или каскадирование, поэтому короткий ответ:
Никогда не изменяйте имя класса на лету! -)
нужно только изменить свойство или два, и это легко реализовать:
function highlight(elm){
elm.style.backgroundColor ="#345";
elm.style.color = "#fff";
}
Просто подумал, что я брошу это в:
function inArray(val, ary){
for(var i=0,l=ary.length; i<l; i++){
if(ary[i] === val){
return true;
}
}
return false;
}
function removeClassName(classNameS, fromElement){
var x = classNameS.split(/\s/), s = fromElement.className.split(/\s/), r = [];
for(var i=0,l=s.length; i<l; i++){
if(!iA(s[i], x))r.push(s[i]);
}
fromElement.className = r.join(' ');
}
function addClassName(classNameS, toElement){
var s = toElement.className.split(/\s/);
s.push(c); toElement.className = s.join(' ');
}
просто скажите myElement.classList="new-class"
, если вам не нужно поддерживать другие существующие классы, в этом случае вы можете использовать методы classList.add, .remove
.
var doc = document;
var divOne = doc.getElementById("one");
var goButton = doc.getElementById("go");
goButton.addEventListener("click", function() {
divOne.classList="blue";
});
div{
min-height:48px;
min-width:48px;
}
.bordered{
border: 1px solid black;
}
.green{
background:green;
}
.blue{
background: blue;
}
<button id="go">Change Class</button>
<div id="one" class="bordered green">
</div>
Я использую следующие ванильные функции JavaScript в моем коде. Они используют регулярные выражения и indexOf
, но не требуют цитирования специальных символов в регулярных выражениях.
function addClass(el, cn) {
var c0 = (" " + el.className + " ").replace(/\s+/g, " "),
c1 = (" " + cn + " ").replace(/\s+/g, " ");
if (c0.indexOf(c1) < 0) {
el.className = (c0 + c1).replace(/\s+/g, " ").replace(/^ | $/g, "");
}
}
function delClass(el, cn) {
var c0 = (" " + el.className + " ").replace(/\s+/g, " "),
c1 = (" " + cn + " ").replace(/\s+/g, " ");
if (c0.indexOf(c1) >= 0) {
el.className = c0.replace(c1, " ").replace(/\s+/g, " ").replace(/^ | $/g, "");
}
}
Вы также можете использовать element.classList в современных браузерах.
Я хотел бы использовать jQuery и написать что-то вроде этого:
jQuery(function($) {
$("#some-element").click(function() {
$(this).toggleClass("clicked");
});
});
Этот код добавляет функцию, вызываемую при щелчке элемента элемента some-element. Функция добавляет клик к атрибуту класса элемента, если он еще не является его частью, и удаляет его, если он есть.
Да, вам нужно добавить ссылку на библиотеку jQuery на своей странице, чтобы использовать этот код , но по крайней мере вы можете быть уверены, что большинство функций в библиотеке будут работать практически во всех современных браузерах, и это сэкономит вам время на выполнение собственного кода, чтобы сделать то же самое.
Спасибо
Ничего себе, удивлено, что здесь так много ответов о переполнении ...
<div class="firstClass" onclick="this.className='secondClass'">
Вы также можете просто сделать:
document.getElementById('id').classList.add('class'); document.getElementById('id').classList.remove('class');
И переключить класс (удалить, если есть еще добавить его):
document.getElementById('id').classList.toggle('class');