#javascript #jquery #code-reuse
#javascript #jquery #повторное использование кода
Вопрос:
Я нахожусь в процессе изучения JavaScript и не уверен, как справиться с простым фрагментом повторно используемого кода.
Что мне нужно, так это фрагмент кода, который будет скрывать () #body01, #body02, #body03, 04,05 и т.д. (Все из них). Затем, когда я нажимаю title01, он понимает, что я хочу переключить () body01. Если я нажму title02, он переключит () body02 и так далее.
<a id="title01">Title 1</a>
<div id="body01">Body content for Title 1</div>
<a id="title02">Title 2</a>
<div id="body02">Body content for Title 2</div>
<a id="title03">Title 3</a>
<div id="body03">Body content for Title 3</div>
Извините, если об этом спрашивали, я не смог ни найти его, ни разобраться сам.
Спасибо!
Комментарии:
1. обязательно ли использовать обычный javascript или вы можете использовать jQuery или какую-либо другую библиотеку? В jQuery есть метод toggle(). Также, что вы пробовали? Опубликуйте javascript, который вы уже пробовали.
2. как новичку я рекомендую вам начать использовать jQuery, это значительно облегчит вашу жизнь.
Ответ №1:
Если вы используете jQuery (если нет, вам следует), это так просто, как это:
$('[id^=title]').click(function(){
var tmp = $(this).attr('id').split("title");
$('#body' tmp[1]).toggle();
});
Комментарии:
1. Если основные разделы всегда идут сразу после заголовочных разделов, я бы рекомендовал решение Sarfraz.
Ответ №2:
Вы можете сделать подобное с помощью jQuery, используя toggle
метод:
$(function(){
$("[id^=title]").click(function(){
$(this).next().toggle();
return false; // prevent moving down or going to link
});
});
Ответ №3:
Слишком часто новые разработчики JS сразу переходят к jQuery, не изучив сначала JavaScript как язык. Вам определенно следует изучить хотя бы немного простого JavaScript, чтобы вы могли лучше понимать и использовать мощные функции jQuery. Лучший способ переключения — это установка и удаление класса, в отличие от установки свойства стиля для элемента. При этом вы могли бы сделать что-то вроде этого.
.скрытый {отображение: отсутствует; }
<div>
<a id="title01" class="toggler">Title 1</a>
<div class="body" id="body01">Body content for Title 1</div>
<a id="title02" class="toggler">Title 2</a>
<div class="body" id="body02">Body content for Title 2</div>
<a id="title03" class="toggler">Title 3</a>
<div class="body" id="body03">Body content for Title 3</div>
</div>
<script>
// set your initial variables
// ideally you will put these in a function which is not
// exposed to the global object
var togglers = document.getElementsByTagName('a'),
divs = document.getElementsByTagName('div'),
i, j;
// here you loop through your a elements and if they have
// a class of toggler you assign the onclick event to a toggle function
for ( i = 0; i < togglers.length; i = 1) {
if (togglers[i].className == 'toggler') {
togglers[i].onclick = toggle;
}
}
function toggle() {
// here you will cache the variable toToggle
// which is the div you want to toggle
var toToggle;
// loop through all divs and if they have a class of body
// you hide it
for (j = 0; j < divs.length; j = 1) {
if (divs[j].className == 'body') {
divs[j].className = ' hidden';
// this is tricky for a beginner. nodeType 1 is an element node
// nextSibling will get the nextSibling but if there is white space
// in your document it will return a text node when you have to toggle
// an element node. this just ensures that it will keep going until it
// finds and element node
if (this.nextSibling.nodeType !== 1) {
toToggle = this.nextSibling.nextSibling;
}
// then you toggle it by removing the hidden class
toToggle.className = 'body';
}
}
}
</script>
</body>
и вот пара ссылок для ссылки на nodeType и next sibling.
https://developer.mozilla.org/en/nodeType
Комментарии:
1. Я не согласен, я пропустил Javascript в целом при изучении jQuery, и каждый раз, когда я смотрю на какой-нибудь стандартный Javascript, я чувствую, что сделал правильный выбор.
2. я полагаю, это все вопрос мнения. если вы не заинтересованы в том, чтобы быть профессиональным разработчиком javascript, то это может не иметь значения, поскольку jQuery предоставляет так много плагинов. при этом я все еще думаю, что полезно знать, что заставляет jQuery делать то, что он делает.
3. Ну, я думаю, что сказать «если вы не заинтересованы в том, чтобы быть профессиональным разработчиком javascript», немного перегибает палку. Я сам пишу большинство «плагинов jQuery», поэтому я все еще программирую, я просто использую более простой и логичный (для меня) метод.
4. Ладно, возможно, это было чересчур. Это просто сводится к вашему собственному мнению. Я хотел знать, как jQuery сделал то, что он сделал, поэтому я начал изучать JavaScript. Есть много случаев, когда теперь я могу написать быструю функцию на обычном JavaScript, где, как и раньше, я загружал бы всю библиотеку jQuery, а не использовал 3/4 ее. Так что для меня знание JavaScript — это огромное преимущество, в отличие от простого знания jQuery.
Ответ №4:
Добавляйте классы к своим элементам DOM, например, так:
<a class="title" id="title01" href="">Title 1</a>
<div class="body" id="body01">Body content for Title 1</div>
<a class="title" id="title02" href="">Title 2</a>
<div class="body" id="body02">Body content for Title 2</div>
<a class="title" id="title03" href="">Title 3</a>
<div class="body" id="body03">Body content for Title 3</div>
Затем вы можете добавить функциональность переключения следующим образом:
$('.title').click(function(e){
e.preventDefault();
$(this).next('.body').toggle();
});
Вот демонстрационная версия для функциональности jQuery, подобной аккордеону