22 декабря 2015
6 июня 2008
17
Пятничные сниппеты. JavaScript
Очередная порция сниппетов, на этот раз несколько маленьких и полезных функций JavaScript, которые облегчат вам жизнь.
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;
}
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) }
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) }
Вот так выглядит регулярное выражение для проверки соответствия адреса E-mail официальному стандарту RFC 2822:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
|"(?:[--!#-[]-]|\
[- -])*")@(?:(?:[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]:(?:[--!-ZS-]|\
[- -])+)])
Что немножко посложнее, чем в приведенном сниппете :-)
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
|"(?:[--!#-[]-]|\
[- -])*")@(?:(?:[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]:(?:[--!-ZS-]|\
[- -])+)])
брать в кавычки? в /^...$/ ?
И еще придется экранировать наверняка.
если представить что это меню как сделать так чтобы переходя с одной странице на другую нужные элементы остались открытыми?
вот пример: