Свойство parentNode
элемента предоставляет вам родительский узел. Элементы имеют функцию insertBefore
, которая вставляет элемент перед другим ссылочным элементом (перемещая его, если он уже находится в другом месте в дереве). И узлы имеют previousSibling
, который дает вам предыдущий узел-брат (который может быть или не быть элементом). Итак:
function swapDiv (elm) {var previous = findPrevious (elm); if (previous) {elm.parentNode.insertBefore (elm, previous); }}
... где findPrevious
выглядит так:
function findPrevious (elm) {do {elm = elm .previousSibling; } while (elm & amp; elm.nodeType! = 1); return elm; }
... где ваши атрибуты onclick
должны быть:
onclick = "swapDiv (this);"
... хотя вы можете захотеть вместо этого подключиться к событию DOM2 ( addEventListener
или attachEvent
в IE).
Немного OT, но могу ли я рекомендовать использовать любую из нескольких доступных библиотек, которые облегчат вашу жизнь, например Prototype , jQuery , Закрытие [ ! d2] или любой из нескольких других . На самом деле, была ошибка в более ранней версии этого, потому что это было , что давно, поскольку я имел дело с DOM напрямую. : -
)
CASE
больше похожа на инструкцию switch. Он имеет два синтаксиса, которые вы можете использовать. Первый позволяет использовать любые команды сравнения, которые вы хотите:
CASE
WHEN user_role = 'Manager' then 4
WHEN user_name = 'Tom' then 27
WHEN columnA <> columnB then 99
ELSE -1 --unknown
END
Второй стиль - это когда вы только изучаете одно значение и немного более кратким:
CASE user_role
WHEN 'Manager' then 4
WHEN 'Part Time' then 7
ELSE -1 --unknown
END
CASE
в MySQL является оператором и выражением , где каждое использование несколько отличается.
Как утверждение, CASE
работает так же, как оператор switch, и полезен в хранимых процедурах, как показано в этом примере из документации (см. выше):
DELIMITER |
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN -- Do other stuff
END;
END CASE;
END;
|
Однако в качестве выражения он может использоваться в статьях:
SELECT *
FROM employees
ORDER BY
CASE title
WHEN "President" THEN 1
WHEN "Manager" THEN 2
ELSE 3
END, surname
Кроме того, как в качестве оператора, так и в качестве выражения, первый аргумент может быть опущен, и каждый WHEN
должен принять условие.
SELECT *
FROM employees
ORDER BY
CASE
WHEN title = "President" THEN 1
WHEN title = "Manager" THEN 2
ELSE 3
END, surname
Я предоставил этот ответ потому что в другом ответе не упоминается, что CASE
может функционировать как выражение, так и выражение. Основное различие между ними состоит в том, что форма оператора заканчивается на END CASE
, а форма выражения заканчивается только END
.
Мне нужен простой пример использования случая, с которым я мог бы играть, это даже не требует таблицы. Это возвращается нечетно или даже зависит от того, являются ли секунды нечетными или даже
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;
SELECT *, your-code AS role_order FROM table
Но я продолжаю получать ошибки. Вы можете показать пример, используя целый запрос? Спасибо! – JD Isaacks 2 August 2010 в 17:41CASE
, с очень похожим синтаксисом, но несколько разные цели / использование. См. Также этот вопрос . – Air 2 May 2014 в 01:40CASE
i>, согласно документации MySQL. В то время как OP ссылается на операторCASE
i>. – Svip 2 January 2015 в 17:17