Еще раз спасибо всем, кто потратил немного своего времени, помогая мне немного понять jQuery, это очень ценится.
Я пытаюсь прилагать усилия и медленно продвигать свой jQuery. Так что я довольно активно работал в stackoverflow, чтобы задавать вопросы о проблемах, с которыми я сталкиваюсь .. спрашиваю " почему " очень много ... Я очень доволен jQuery и использую его ежедневно. Однако всегда есть чему поучиться и пробелы в моих знаниях восполнить. Поэтому я решил попробовать сделать плагин jQuery - что-то очень простое, что я могу расширить как личный проект, чтобы я мог научиться делать что-то на руках.
Итак, я решил сделать очень простой аккордеонный плагин .
jsFiddle текущего аккордеона
(function($){
//The current script for the plugin..
$.fn.simpleAccordion = function() {
$("li a").live("click", function(e){
e.preventDefault();
$("li div").slideUp(200);
$(this).next(':hidden').slideDown(200);
});
};
})(jQuery);
ПЕРВАЯ ПРОБЛЕМА: Я читал документы jQuery Плагины / авторинг .
Первая проблема, с которой я столкнулся, в документах: состояния $ (this) обычно используются неправильно .. и должны иметь значение "this.fadeIn ('normal', function () {..." -
$(this).next(':hidden').slideDown(200);
Использую ли я "this" в правильном контексте в строке выше?
В настоящее время я понимаю, что «this» ссылается на селектор, на который был вызван плагин .. так ul # accordion .. тогда почему он не работает без $ ("") ..
$(document).ready(function(){
$("ul#accordion").simpleAccordion();
});
ВТОРАЯ ПРОБЛЕМА:
Мне кажется, я сам нашел решение этой проблемы (см. Ниже)
Я тестировал то, что уже сделал, и понял, что если я добавлю тег / ссылку ancor в текстовое содержание моего аккордеона, эта ссылка также откроет и закроет панели. Я попытался изменить селектор на функцию щелчка на
$("li a:first-child").live("click",..
чтобы убедиться, что только к первому тегу ancor, идущему по нажатой ссылке, было прикреплено событие ... но не повезло ... Я не хочу, чтобы каждый тег внутри li запускал функции слайдов, я хочу, чтобы они оставались в одиночку ... так что лучше было бы дать имя класса или использовать более конкретный селектор? : P
Мне кажется, я нашел правильное решение второго вопроса (ниже)
$("li > a:first-of-type").live("click", function(e){
Еще раз спасибо, я знаю, это было немного многословно!
jsFiddle текущего аккордеона