289

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

6 июня 2008, 20:23JavaScriptрейтинг +23-

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

cookie, javascript, checkmail, getelementsbyclassname, geturlvars, определение браузера
Здесь могла бы быть Ваша реклама
показать рекламу :)убрать рекламу

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;
}
Memori.rumister-wong.combobrdobr.rumoemesto.rudel.icio.uszakladki.yandex.rugoogle.com/bookmarks/

Комментарии

> "block" ? "none" : "block"; а можно конкретно эту запись пояснить ? Это, я так понимаю, если блок то поставить нон, иначе блок?
Soider, 9 июня 2008, 10:22
el.style.display == "block" ? "none" : "block";
Ага, можно показать на примере попроще:
x = 10;
y = x > 9 ? 100 : 200; 
Это значит, если x больше 9, вернуть 100 (то есть y присвоится 100), иначе 200. Весьма лаконично. Такие же конструкции есть не только в js, точно так же можно писать, например, на C#.
Жека, 10 июня 2008, 14:34
Определение браузера хотя бы функцию написали...
antohins, 17 июня 2008, 16:51
Спасибо, отличные снипеты! : )
Smozjo, 19 июня 2008, 8:47
А функция [Проверка корректности электронной почты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) }
Sanki, 19 июня 2008, 9:39
Что-то в кучу все собралось (тэг 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) }
Sanki, 19 июня 2008, 9:42
в местах пробела должны быть (плюсы)
Sanki, 19 июня 2008, 9:44

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)
}
Sanki, 19 июня 2008, 15:38