Пятничные сниппеты. JavaScript

6 июня 2008, 20:23 Павел Марковнин JavaScript рейтинг +35-

Очередная порция сниппетов, на этот раз несколько маленьких и полезных функций javascript, которые облегчат вам жизнь. Напомню, что предыдущие сниппеты были по CSS и jQuery.

1. Скрыть или показать элемент

function showhide(e)
{
el = document.getElementById(e);
el.style.display = el.style.display == "block" ? "none" : "block";
}

2. Определение браузера

// Internet Explorer
var ie = document.all != null; //ie4 and above
var ie5 = document.getElementById && document.all;
var ie6 = document.getElementById && document.all&&(navigator.appVersion.indexOf("MSIE 6.")>=0);

// Firefox
var ff = !document.layers && !document.all;

// Opera
var op = navigator.userAgent.indexOf("opera")>0;
var op7 = op && operaVersion() <= 7;
var op8 = op && operaVersion() >= 8;

// Detects the Opera version
function operaVersion()
{
agent = navigator.userAgent;
idx = agent.indexOf("opera");
if (idx>-1)
{
return parseInt(agent.subString(idx+6,idx+7));
}
}

3. Получение массива элементов по имени класса

function getElementsByClass(searchClass,node,tag) 
{
var classElements = new Array();
if (node == null) node = document;
if (tag == null) tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp('(^|s)'+searchClass+'(s|$)');
for (i = 0, j = 0; i < elsLen; i++)
{
if (pattern.test(els[i].className))
{
classElements[j] = els[i];
j++;
}
}
return classElements;
}

4. Установка, получение и удаление cookie

function getCookie( name ) 
{
var start = document.cookie.indexOf( name + "=" );
var len = start + name.length + 1;
if ((!start) && (name != document.cookie.substring( 0, name.length)))
{
return null;
}
if (start == -1) return null;
var end = document.cookie.indexOf(';', len);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(len, end));
}

function setCookie (name, value, expires, path, domain, secure)
{
var today = new Date();
today.setTime(today.getTime());
if (expires)
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires));
document.cookie = name+'='+escape( value ) +
((expires) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
((path) ? ';path=' + path : '' ) +
((domain) ? ';domain=' + domain : '' ) +
((secure) ? ';secure' : '' );
}

function deleteCookie (name, path, domain)
{
if (getCookie(name)) document.cookie = name + '=' +
((path) ? ';path=' + path : '') +
((domain) ? ';domain=' + domain : '' ) +
';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

5. Получение переменных из адресной строки

function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}

// Использование.
// Пусть адрес такой: http://primera.vremenno.net?huj=est&blaa=da

// var hash = getUrlVars();
// alert(hash['huj']); // выдаст 'est'
// alert(hash['blaa']); // выдаст 'da'

6. Проверка корректности электронной почты

function checkMail(email)
{
var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email))
{
return true;
}
return false;
}
Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

Комментарии — 15

RSS
  • Аватарка
    9 июня 2008 в 10:22 Soider
    > "block" ? "none" : "block"; а можно конкретно эту запись пояснить ? Это, я так понимаю, если блок то поставить нон, иначе блок?
  • Аватарка
    10 июня 2008 в 14:34 ]]>Жека]]>
    el.style.display == "block" ? "none" : "block";
    Ага, можно показать на примере попроще:
    x = 10;
    y = x > 9 ? 100 : 200; 
    
    Это значит, если x больше 9, вернуть 100 (то есть y присвоится 100), иначе 200. Весьма лаконично. Такие же конструкции есть не только в js, точно так же можно писать, например, на C#.
  • Аватарка
    17 июня 2008 в 16:51 ]]>antohins]]>
    Определение браузера хотя бы функцию написали...
  • Аватарка
    19 июня 2008 в 8:47 Smozjo
    Спасибо, отличные снипеты! : )
  • Аватарка
    19 июня 2008 в 9:39 Sanki
    А функция [Проверка корректности электронной почтыk не корректна. Например ящик типа post@192.168.0.1 он возвращает false, хотя ящик написан корректно. Или post@-server.ru возвращет true, хотя сервер ящика некорректен. Предлагаю такую ф-цию: function checkMail(email) { var filter = /^[w-.]+@(([da-z][da-z-] .) [a-z]{2,4}|(d{1,3}.){3}d{1,3})$/gi; return filter.test(email) }
  • Аватарка
    19 июня 2008 в 9:42 Sanki
    Что-то в кучу все собралось (тэг code не сработал). Попробую еще раз: function checkMail(email) { var filter = /^[w-.]+@(([da-z][da-z-] .) [a-z]{2,4}|(d{1,3}.){3}d{1,3})$/gi; return filter.test(email) }
  • Аватарка
    19 июня 2008 в 9:44 Sanki
    в местах пробела должны быть (плюсы)
  • Аватарка
    19 июня 2008 в 15:38 Sanki
    
    function checkMail(email) {
    	var filter = /^[w-.]+@(([da-z][da-z-] .) [a-z]{2,4}|(d{1,3}.){3}d{1,3})$/gi;
    	return filter.test(email)
    }
    
  • Аватарка
    10 января 2009 в 20:34 ]]>Алик Кириллович]]>
    Проверка валидности e-mail — далеко не тривиальная задача.

    Вот так выглядит регулярное выражение для проверки соответствия адреса E-mail официальному стандарту RFC 2822:

    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
    |"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|\
    [x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*
    [a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|
    [(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}
    (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*
    [a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|\
    [x01-x09x0bx0cx0e-x7f])+)])


    Что немножко посложнее, чем в приведенном сниппете :-)
  • Аватарка
    4 февраля 2009 в 20:05 maugli
    как использовать в javascript это ?

    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
    |"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|\
    [x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*
    [a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|
    [(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}
    (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*
    [a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|\
    [x01-x09x0bx0cx0e-x7f])+)])
  • Аватарка
    4 февраля 2009 в 21:54 ]]>Grin]]>
    maugli, это паттерн для проверки мыла, использовать вот так:
    function checkMail(email) {
    var filter = тут этот паттерн;
    return filter.test(email)
    }
  • Аватарка
    12 октября 2009 в 2:25 Андрей
    Grin, все равно не ясно как этот шаблон вставить в функцию...

    
    function checkMail(email) {
       var filter = (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|
    [x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*
    [a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|
    [(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}
    (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*
    [a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|
    [x01-x09x0bx0cx0e-x7f])+)]);
       return filter.test(email)
    }
    

    брать в кавычки? в /^...$/ ?
  • Аватарка
    13 октября 2009 в 14:43 Arris
    Ну естественно в кавычки!!! Нет, блин, прямо так писать.

    И еще придется экранировать наверняка.
  • Аватарка
    15 октября 2009 в 13:28 wcb-falcon
    На счет Скрыть или показать элемент
    если представить что это меню как сделать так чтобы переходя с одной странице на другую нужные элементы остались открытыми?
    вот пример:
    
    <script language="javascript">
    window.onload = function() {
    	var p1 = document.getElementById('p1');
    	var p1_1 = document.getElementById('p1_1');
    	var p1_2 = document.getElementById('p1_2');
    	
    	var p2 = document.getElementById('p2');
    	var p2_1 = document.getElementById('p2_1');
    	var p2_2 = document.getElementById('p2_2');
    	
      p1.onclick = function(e) {
        if(!e) {
          var e = window.event;
    	}
    	p1_1.style.display = 'block';
    	p1_2.style.display = 'block';
    	
    	p2_1.style.display = 'none';
    	p2_2.style.display = 'none';
    	return false;
      }  
      
      p2.onclick = function(e) {
        if(!e) {
          var e = window.event;
    	}
    	p1_1.style.display = 'none';
    	p1_2.style.display = 'none';
    	
    	p2_1.style.display = 'block';
    	p2_2.style.display = 'block';
    	return false;
      }  
    }
    </script>
    
    <style type="text/css">
    #p1_1, #p1_2, #p2_1, #p2_2 {display:none;}
    </style>
    
    <ul>
      <li id="p1">меню_p1</li>
          <ul>
            <li id="p1_1"><a href="000_menu_p11.html">меню_p1_1</a></li>
            <li id="p1_2"><a href="000_menu_p12.html">меню_p1_2</a></li>
          </ul>
      <li id="p2">меню_p2</li>
          <ul>
            <li id="p2_1"><a href="000_menu_p21.html">меню_p2_1</a></li>
            <li id="p2_2"><a href="000_menu_p22.html">меню_p2_2</a></li>
          </ul>
    </ul>
    <hr>
    
  • Аватарка
    4 июля в 3:45 Роман
    Подскажите, а как у Вас работает, вот например при нажатии "дополнительная информация" выежает остальное все? Если есть урок, дайте ссылку пожалуйста!
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>