проголосовало
4 пользователей

JavaScript. Кто целенаправленно учил JS?:) Думаю, таких будет не много. Хвастайтесь.

JavaScript программирование →  FAQ JQuery на русском

Как выбрать элемент по его id или классу?



Выбираем элемент с id «myDivId». Поскольку id является уникальным, это выражение всегда выбирает один элемент. Или ничего не выбирает, если элемента с таким id не существует.

$('#myDivId');


Выбираем элемент(ы) с классом «myCssClass». Поскольку любое количество элементов может иметь этот класс, это выражение будет выбирать любое количество элементов.

$('.myCssClass');


Выбранный элемент может быть присвоен переменной javascript, например, так:

var myDivElement = $('#myDivId');


В выбранном элементе есть возможность задействовать другие функции JQuery

// получаем значение элемента
      var myValue = $('#myDivId').val();
      // устанавливаем значение элемента
      $('#myDivId').val("hello world");


Выбирая элементы по имени класса, лучше использовать составной селектор. Если отбор идет по id, то логично использовать именно id.

$('#myDivId'); // хорошо
      $('div#myDivId'); // плохо
      $('span.myCssClass'); // хорошо
      $('.myCssClass'); // плохо


Как проверить имеет ли элемент специфический класс?



Можно использовать метод is() вместе с подходящим селектором.

if ( $('#myDiv').is('.pretty') )
      $('#myDiv').show();


Заметьте, что этот метод позволяет проверять также и другие вещи. Например можно проверить, скрыт ли элемент (при использовании селектора :hidden).

if ( $('#myDiv').is(':hidden') )
      $('#myDiv').show();


Начиная с версии 1.2 был добавлен hasClass.

$("div").click(function(){
      if ( $(this).hasClass("protected") )
      $(this)
      .animate({ left: -10 })
      .animate({ left: 10 })
      .animate({ left: -10 })
      .animate({ left: 10 })
      .animate({ left: 0 });
      });
 


В этом коде добавляется некая анимация для элемента(ов) с классом protected. Обратите внимание, что имя класса тут записывается без точки.

Как проверить существование элемента?



Вы можете использовать свойство length набора jQuery, возвращенного селектором.

if ( $('#myDiv').length )
      $('#myDiv').show();
 


Не всегда необходимо проверять, существует ли элемент. Следующий код показал бы элемент, если он существует, и не сделал бы ничего (и никакой ошибки не возникло бы), при его отсутствии.

$('#myDiv').show();


Как определить состояние переключаемого элемента?



Можно проверить состояние, используя селекторы:visible или:hidden.

var isVisible = $('#myDiv').is(':visible');
      var isHidden = $('#myDiv').is(':hidden');


Можно воздейстовать на элемент, основываясь на его видимости, просто включите «:visible» или «:hidden» в выражение селектора.

$('#myDiv:visible').animate({left: '+=200px'}, 'slow');


Как выбирать элементы, которые имеют спец. символы в id?



Некоторые фреймворки могут генерить уникальные id, которые содержат в себе спец. символы (например, ‘.’ или ‘[..]‘). Проблема состоит в том, что эти символы имеют специальное значение в CSS. Что делать? Смотрим ниже:

$("#some.id") // не работает
      $("#some\\.id") // работает
      $("#some[id]") // не работает
      $("#some\\[id\\]") // работает


Как разрешать/запрещать использование элемента?



Можно разрешать/запрещать элемент, устанавливая атрибут ‘disabled’ в значение ‘disabled’ (чтобы запретить использование элемента) или присвоить тому же атрибуту пустое значение «, или же просто удалить атрибут ‘disabled’ (чтобы разрешить использование элемента). Как это сделать? Смотрим ниже:

// запрещаем использование элемента #x
      $("#x").attr("disabled","disabled");
      // разрешаем  использование элемента #x
      $("#x").attr("disabled","");
      // разрешаем  использование элемента #x
      $("#x").removeAttr("disabled");


HTML код для тестов:

<select id="x" style="width: 200px;"> <option>Один</option> <option>Два</option> <option>Три</option> </select>
      <input onclick="$('#x').attr('disabled','disabled')" type="button" value="Disable" />
      <input onclick="$('#x').removeAttr('disabled')" type="button" value="Enable" />


Как отметить/снять отметку с элемента checkbox?



Можно отметить/снять отметку c элемента checkbox, устанавливая атрибуту ‘checked’ значение ‘checked’ (чтобы отметить элемент) или установить атрибуту ‘checked’ пустое значение »« (чтобы снять отметку).

// отмечаем checkbox с id="c"
      $("#c").attr("checked", "checked");
      // снимаем отметку checkbox'а с id="c"
      $("#c").attr("checked","");
 


HTML код для теста:

<label><input id="c" type="checkbox" />это подопытный checkbox</label>


Как получать значения выбранной опции элемента select?



Элементы select обычно имеют два значения, к которым нужно обратиться. Это значение атрибута value соответствующего элемента option и его текстовое значение.

HTML для примера:

<select id="myselect"> <option value="1">Mr</option> <option value="2">Mrs</option> <option value="3">Ms</option> <option value="4">Dr</option> <option value="5">Prof</option> </select>


Из него можно получить значение атрибута value, выбранной опции:

$("select#myselect").val();


Или получить текст выбранной опции:

$("#myselect option:selected").text();


Как заменить текст в третьем элементе в списке из десяти элементов?



Селектор:eq() или метод .eq() позволяют выбрать необходимый элемент. Для того что бы заменить текст, сначала его нужно получить, например, методом .text(), а потом отдать куда необходимо. Пример ниже:

// не работает
  $(this).find('li a').eq(2).text().replace('foo','bar');

  // работает
  var $thirdLink = $(this).find('li a').eq(2);
  var linkText = $thirdLink.text().replace('foo','bar');
  $thirdLink.text(linkText);
0

JavaScript программирование →  JQuery плагин для построения красивых графиков

Считаю, что такие вещи нужно популяризировать и доносить до людей. Супер плагин на JQuery для построения графиков. С ним можно забыть о генерации графиков картинками на php и о флеше тоже. Очень простой для понимания. Пользуйтесь:)
Демо в русском виде выложил в разделе Jquery плагины и решения, найти будет не сложно.



Скачать можно здесь русскую версию документации и примеров Flot, а здесь английскую.
0

JavaScript программирование →  Jquery UI: sortable и сохранение позиции айтема

Как по мне, документация к JQuery достаточно сыроватая и неудобная. Для того что бы разобраться с документацией по UI, необходимо достаточно много пописать использованием JQuery, т.е. дойти до такого уровня, когда документация уже не нужна:)
Рассмотрим юзер интерфейс Sortable. Исходя из документации и примера, все кажется понятным, проблемы и непонятки могут возникнуть в случае, когда возникнет необходимость сохранить последовательность наших айтемов.

Решение:

<style>
  #test-list { list-style: none; padding: 0; margin: 0 40px; }
  #test-list li { margin: 0 0 10px 0; background: #eaf3fa; padding: 15px; }
  #test-list .handle { float: left; margin-right: 10px; cursor: move; }
  #test-log { padding: 5px; border: 1px solid #ccc; }
</style>
<script type="text/javascript" src="{ latest jquery release }"></script>
<script type="text/javascript" src="{ ui core }"></script>
<script type="text/javascript" src="{ ui sortable }"></script>
<script type="text/javascript">
  // When the document is ready set up our sortable with it's inherant function(s)
  $(document).ready(function() {
    $("#test-list").sortable({
      handle : '.handle',
      update : function () {//здесь делаем действие, которое нам нужно, например аяксовый вызов сохранения
        $("input#test-log").val($('#test-list').sortable('serialize'));
      }
    });
});
</script>
<ul id="test-list">
  <li id="listItem_1"><img src="arrows.png" class="handle" alt="move" />Item 1 with a link to <a href="http://www.google.co.uk/" rel="nofollow">Google</a></li>
  <li id="listItem_2"><img src="arrow.png" class="handle" alt="move" />Item 2</li>
  <li id="listItem_3"><img src="arrow.png" class="handle" alt="move" />Item 3</li>
  <li id="listItem_4"><img src="arrow.png" class="handle" alt="move" />Item 4
    <p>Perhaps you want to add a form in here?</p>
    <p>Text:<br /><input type="text" /></p>
    <p>And a textarea<br /><textarea></textarea></p>
  </li>
</ul>
<label for="test-log"><strong>Resultant order of list</strong></label>
<input type="text" size="70" id="test-log" />


В данном примере данные сириализуются и заносятся в текстовое поле с id=«test-log»
0

JavaScript программирование →  Симуляция задержки между fade in/out эффектами в JQuery

Jquery хорош тем, что позволяет пименять так называемые «цепочные решения».

Решение в лоб:

$("#foo").show().hide();


Показывает и скрывает элемент с id=«foo».

Fade-in-fade-out


Если нужно красиво показать блок и так же красиво его скрыть, используем fade-in-fade-out эффект:

$(document).ready(function() {
        $("#foo").fadeIn(2000).fadeOut(2000);
});


В течении 2 секунд (2000 мс) блок будет проявляться, потом в течении 2 секунд блок будет скрываться. Если нам необходимо установить задержку между fadeIn и fadeOut, тогда делаем так:

$(document).ready(function() {
        $("#foo").fadeIn(2000).delay(5000).fadeOut(2000);
});


Установлена задержка в 5 секунд.

Фокусы с задержкой без delay


Для проявления полупрозрачности (50% — второй параметр) с задержкой в 3 секунды можно воспользоваться следующим кодом:

$("#foo").fadeTo(3000, 0.5);


Рассмотрим пример задержки:
1. Проявить элемент в течении двух секунд (прозрачность от 0 до 1)
2. Задержать прозрачность на уровне 1 в течении 5 секунд
3. Прятать блок в течении 2 секунд (прозрачность с 1 до 0)

Решение:
$(document).ready(function() {
        $("#foo").fadeIn(2000).fadeTo(5000, 1).fadeOut(2000);
});


Задержка перед стартом


$(document).ready(function() {
        $("#foo").fadeTo(3000, 0).fadeIn(2000)
        .fadeTo(5000, 1).fadeOut(2000);
});
1

JavaScript программирование →  Изменение размера шрифта в теле HTML документа

Иногда приходится выполнять достаточно непонятные задания заказчика или описанные в ТЗ. Одним из маразмов является онлайн изменение размера шрифта тела HTML. Зачем это надо я не знаю. Наверно, просто эффектная, никому ненужная фишка.
Сделаем это при помощи яваскриптового фреймворка JQuery и ихнего же UI, что бы было красивее:)

Итак, имеем три кнопки:


<div id="cahnge-font-size">
        <input class="ui-state-default ui-corner-all" id="decreaseFont" type="button" name="#" value="Меньше">
        <input class="ui-state-default ui-corner-all" id="resetFont" type="button" name="#" value="Нормально">
        <input class="ui-state-default ui-corner-all" id="increaseFont" type="button" name="#" value="Больше">
</div>
 


Яваскрипт будет выглядеть так:


<script type="text/javascript">
$(document).ready(function(){
        //      Reset Font Size
        var originalFontSize = $('html').css('font-size');
        $("#resetFont").click(function(){
                $('html').css('font-size', originalFontSize);
        });
        //      Increase Font Size
        $("#increaseFont").click(function(){
                var currentFontSize = $('html').css('font-size');
                var currentFontSizeNum = parseFloat(currentFontSize, 10);
                var newFontSize = currentFontSizeNum*1.2;
                $('html').css('font-size', newFontSize);
                return false;
        });
        //      Decrease Font Size
        $("#decreaseFont").click(function(){
                var currentFontSize = $('html').css('font-size');
                var currentFontSizeNum = parseFloat(currentFontSize, 10);
                var newFontSize = currentFontSizeNum*0.8;
                $('html').css('font-size', newFontSize);
                return false;
        });
});
</script>
 
0

JavaScript программирование →  Просмотреть свойства объекта

Очень полезно при дебаге:

<SCRIPT LANGUAGE="JavaScript">
<!--
function getObjectProperties (object) {
 var result = '';
 for (var property in object) {
  result += property + ': ' + object[property] + '\r\n';
 }
 return result;
}
alert(getObjectProperties(document.body));//передаем объект, в данном случае тело документа, вывод уже на усмотрение программиста, естественно:)
//-->
</SCRIPT>
 
0

JavaScript программирование →  Пишем счетчик "До нового года осталось"


<script language='javascript' type='text/javascript'>
function fulltime ()   {
var time=new Date();
var newYear=new Date("jan,01,2009,00:00:00"); // здесь вместо 2009 можно вставить php функию <?= date("Y") + 1?>
var totalRemains=(newYear.getTime()-time.getTime());

if (totalRemains>1){

var RemainsSec = (parseInt(totalRemains/1000));
var RemainsFullDays=(parseInt(RemainsSec/(24*60*60)));
var secInLastDay=RemainsSec-RemainsFullDays*24*3600;
var RemainsFullHours=(parseInt(secInLastDay/3600));
if (RemainsFullHours<10){RemainsFullHours="0"+RemainsFullHours};
var secInLastHour=secInLastDay-RemainsFullHours*3600;
var RemainsMinutes=(parseInt(secInLastHour/60));
if (RemainsMinutes<10){RemainsMinutes="0"+RemainsMinutes};
var lastSec=secInLastHour-RemainsMinutes*60;
if (lastSec<10){lastSec="0"+lastSec};

document.getElementById("RemainsFullDays").innerHTML=RemainsFullDays+"<span id='Rem'> дн</span>";
document.getElementById("RemainsFullHours").innerHTML=RemainsFullHours+"<span id='Rem'> час</span>";
document.getElementById("RemainsMinutes").innerHTML=RemainsMinutes+"<span id='Rem'> мин</span>";
document.getElementById("lastSec").innerHTML=lastSec+"<span id='Rem'> сек</span>"; <!-- highslide start  -->
setTimeout('fulltime()',10)  
}

else{
document.getElementById("clock").innerHTML="C НОВЫМ
ГОДОМ !!!";
}
}
</script>
<style type='text/css'>
#clou_xs {position:relative;width:180px;height:235px;background: url(http://s.php5.com.ua/images/php_snow_2008.gif) no-repeat; background-color: #9999CC; padding:10px}
#clock {width:175px;height:235px;text-align:right;color:#000099;font-size:13px;}
#RemainsFullDays {font-size:25px;color: #2C79BF;}
#RemainsFullHours {position:absolute;bottom:1px;left:40px;font-size:15px;color:#000099;}
#RemainsMinutes {position:absolute;bottom:1px;left:87px;font-size:15px;color:#000099;}
#lastSec {position:absolute;bottom:1px;left:135px;font-size:15px;color:#000099;}
#Rem {font-size:11px;font-weight:normal;color:#000099;}
</style>
<div id='clou_xs'>
<div id='clock'>до нового года
 осталось:

<span id='RemainsFullDays'></span>
  <span id='RemainsFullHours'></span>
  <span id='RemainsMinutes'></span>
  <span id='lastSec'></span>
</div>
</div>
<script language='javascript'>fulltime();</script>
 


В результате получаем: До нового года осталось.
0
←  сюда    туда  →
1 2