→

JavaScript программирование →  Обход выбранных элементов (чекбоксов) в JQuery

Итак, когда мы выбрали интересующие нас элементы после прочтения статьи о селекторах в JQuery, было бы неплохо «вынуть» то, что мы получили.
Например, имеем группу из четырех чекбоксов, выбором которых будем удалять записи:

<input type="checbox" name="delete-article[]" value="1" class="delete-article">
<input type="checbox" name="delete-article[]" value="2" class="delete-article">
<input type="checbox" name="delete-article[]" value="3" class="delete-article">
<input type="checbox" name="delete-article[]" value="4" class="delete-article">


Собственно, JavaScript:
<script type="text/javascript">
var array_delete_articles = $("input:checkbox[class=delete-article]:checked"); // загнали в переменную, что бы по несколько раз не делать выборку
if(array_delete_articles.size() == 0){ // т.к. чекбоксов у нас на странице может быть еще много, то ввели класс, по которому будет осуществляться выборка, в принципе можно было сделать селектор через имя чекбокса, но я не пробовал (получится?)
        alert("Отметьте хотя бы один чекбокс для удаления статьи.")
}
else {
        array_delete_articles.each(
                function() { // ajax запрос на удаление артикла
                        $.ajax({
                                type: "GET",
                                url: '/article/delete/' + this.value
                        });
                }
        );
}
</script>


Ну, в общем как-то так:) Надеюсь, кому-то помогло.
1

JavaScript программирование →  Селекторы в JQuery в примерах

Для опытов соорудим html страницу:

<div id="header">
    <h1><a href="/" title="homepage">Title</a></h1>
    <h2>Sub-title <span>small description</span></h2>
</div>
<div id="wrapper">
    <div id="content">
        <div class="post">
            <h3>Post Title</h3>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
               Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
               vel varius augue tortor vel tortor.</p>
            <span>Image Title</span>
            <img src="/image1.jpg" alt="Image Alt Text"/>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
               Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
               vel varius augue tortor vel tortor.</p>
            <span class="inner-banner">Banner Text</span>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
               Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
               vel varius augue tortor vel tortor.</p>
        </div>
        <span id="banner"><img src="/banner1.jpg" alt="Big Banner"/></span>
        <div class="post">
            <h3>Post Title</h3>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
               Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
               vel varius augue tortor vel tortor.</p>
            <span>Image Title</span>
            <img src="/image2.jpg" alt="Image Alt Text"/>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
               Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
               vel varius augue tortor vel tortor.</p>
            <span class="inner-banner">Banner Text</span>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
               Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
               vel varius augue tortor vel tortor.</p>
        </div>
    </div>
</div>
<div id="sidebar">
    <ul>
         <li><a href="/item0.html">Menu Item 0</a></li>
         <li><a href="/item1.html">Menu Item 1</a></li>
         <li><a href="/item2.html">Menu Item 2</a></li>
         <li><a href="/item3.html">Menu Item 3</a></li>
    </ul>
</div>
<div id="footer">
    Copyright 2008
</div>
 


Выбор элементов по Id либо ClassName:

$('#sidebar');    // выбор элемента с id = sidebar
$('.post');       // выбор элементов с class = post
$('div#sidebar'); // выбор элемента div с id = sidebar
$('div.post');    // выбор элементов div с class = post


Иерархия объектов в DOM



Выборка деток:

$('div span');            // выбор всех span элементов в элементах div


Аналогичный результат можно получить используя следующую конструкцию:

$('div').find('span');    // выбор всех span элементов в элементах div


Выборка только непосредственных деток:

$('div > span');          // выбор всех span элементов в элементах div, где span является прямым потомком div'a


Группируем селекторы:

$('div, span');          // выбор всех div и span элементов


Ищем по соседям:

$('span + img');         // выбор всех img элементов перед которыми идут span элементы
$('span ~ img');         // выбор всех img элементов после первого элемента span
$('#banner').prev();     // выбор предыдущего элемента от найденого
$('#banner').next();     // выбор следующего элемента от найденого


Выборка всех элементов, всех родителей, всех деток:

$('*');                // выбор всех элементов
$('p > *');            // выбор всех потомков элементов p
$('p').children();     // --
$('p').parent();       // выбор всех прямых предков элементов p
$('* > p');            // выбор всех предков элементов p (скорей всего Вам не понадобится)
$('p').parents();      // --
$('p').parents('div'); // выбор всех предков элемента p которые есть div (parents принимает в качестве параметра селектор)


Фильтры



Фильтров в jQuery реализовано достаточно много:

$('div:first');     // выбираем первый div в доме
$('div:last');      // выбираем последний div в доме
$('div:not(.red)'); // выбираем div'ы у которых нету класса red
$('div:even');      // выбираем четные div'ы
$('div:odd');       // выбираем нечетные div'ы
$('div:eq(N)');     // выбираем div идущим под номером N в DOMe
$('div:gt(N)');     // выбираем div'ы, индекс которых больше чем N в DOMe
$('div:lt(N)');     // выбираем div'ы, индекс которых меньше чем N в DOMe
$(':header');       // выбо заголовоков h1, h2, h3 и т.д.
$('div:animated');  // выбор элементов с активной анимацией


Фильтры по контенту и видимости:

$('div:contains(text)'); // выбираем div'ы содержащие текст
$('div:empty');          // выбираем пустые div'ы
$('div:has(p)');         // выбираем div'ы которые содержат p
$('div.red').filter('.bold') // выбираем div'ы которые содержат класс red и класс bold
$('div:hidden');         // выбираем скрытые div'ы
$('div:visible');        // выбираем видимые div'ы


Фильтры по атрибутам:

$("div[id]");           // выбор всех div с атрибутом id
$("div[title='my']");   // выбор всех div с атрибутом title=my
$("div[title!='my']");  // выбор всех div с атрибутом title не равного my
$("div[title^='my']");  // выбор всех div с атрибутом title начинающихся с my
                        // <div title="myCat">,<div title="myCoffee">, <div title="my...">
$("div[title$='my']");  // выбор всех div с атрибутом title заканчивающихся на my
                        // <div title="itsmy">,<div title="somy">, <div title="...my">
$("div[title*='my']");  // выбор всех div с атрибутом title содержащим my
                        // <div title="itsmy">,<div title="myCat">, <div title="its my cat">,<div title="...my...">


Стоит отдельно отметить следующий фильтр:

$("a[rel~='external']"); // выбор всех A с атрибутом rel содержащим external в списке значений разделенных пробелом


В результате его работы будут выбраны следующие теги:

<a href="" rel="external">link</a> — да
<a href="" rel="nofollow external">link</a> — да
<a href="" rel="external nofollow">link</a> — да
<a href="" rel="friend external follow">link</a> — да
<a href="" rel="external-link">link</a> — нет


Для работы с элементами форм есть ряд селекторов позволяющий выбирать по типу элемента и фильтров — enabled/disabled/selected/checked:

$(":text");            // выбор всех input элементов с типом =text
$(":radio");           // выбор всех input элементов с типом =radio
                       // и так далее
$("input:enabled");    // выбор всех включенных элементов input
$("input:checked");    // выбор всех отмеченных чекбоксов


Группируем фильтры:

$("div[name=city]:visible:has(p)"); // выбор видимого div'a с именем city, который содержит тег p


Полезные селекторы для работы с элементами форм:

$("form select[name=city] option:selected").val(); // получение выбранного(-ых) элементов в селекте city
$("form :radio[name=some]:checked").val(); // получение выбранного значения радиобатона с именем some
$("form :checkbox:checked"); // выбор всех выбранных чекбоксов


Работа с элементом SELECT



Удалить все элементы списка:

$('select[@name=mySelect] option').remove();


Добавить в список новый элемент:

$('select[@name=mySelect]').append('<option>Новый элемент списка</option>');


Например, список формируется из XML данных таким образом:

$(xml).find('file').each( function(){
        $('select[@name=loadFileName]').append('<option>'+$(this).find('title').text()+'</option>');
});


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

Сделать выделенным первый пунки списка:

$('select[@name=loadFileName] option:first').attr('selected', 'yes');


Принудительно снять выделение с элемента списка:

$('select[@name=loadFileName] option:first').removeAttr('selected');


Получить значение выделенного пункта из списка:

Тут есть два варианта. Первый, если вы используете аттрибут <option value=«some value»>:

var file = $('select[@name=loadFileName] option:selected').val();


И второй вариант: вы не задаете value, вас интересует то, что заключено между … (как у меня в проекте):

var file = $('select[@name=loadFileName] option:selected').text();
 

Теперь переменная file содержит нужное нам значение.

Проверить, выбран ли какой-нибудь элемент списка. Это нужно делать обязательно, иначе в приложении могут возникнуть проблемы:

if( typeof $('select[@name=loadFileName] option:selected').text() === 'undefined' ){
       alert('Ни один элемент списка не выбран');
}


Превратить список в «автомасштабируемый, т.е. отобразить в списке ровно столько элементов, сколько в нем есть:

$('select[@name=loadFileName]').attr('size', $('select[@name=loadFileName] option').size());


Сделать недоступны для выбора отдельный элемент:

$('select[@name=loadFileName] option:contains('текст нужного элемента')').attr('disabled', 'disabled');


Разрешить выделение всех ранее недоступных элементов можно так:

$('select[@name=loadFileName] option:disabled').removeAttr('disabled');
0
2

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
1