Помогите найти подредактировать скрипт открытия\закрытия
В общем есть скрипт, который открывает блок и закрывает+сохраняет на куки:
$(function () {
plus = './images/plus.png';
minus = './images/minus.png';
function Switchable(classname) {
function getElementsByClassName(imgclass) {
if (document.getElementsByClassName) {
return document.getElementsByClassName(imgclass);
} else {
var nodes = document.getElementsByTagName('*'),
tmp = [];
for (var i = 0; i < nodes.length; i++) {
if (new RegExp('\\b' + imgclass + '\\b').test(nodes[i].className)) {
tmp.push(nodes[i]);
}
}
return tmp;
}
}
function Next(element) {
var next = element;
while (next = next.nextSibling)
if ("innerHTML" in next) return next;
return element;
}
function getCookie(a) {
var b = document.cookie.match(new RegExp("(?:^|; )" + a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") + "=([^;]*)"));
return b ? decodeURIComponent(b[1]) : undefined
}
function setCookie(b, f, c) {
c = c || {};
var i = c.expires;
if (typeof i == "number" && i) {
var h = new Date();
h.setTime(h.getTime() + i * 1000);
i = c.expires = h
}
if (i && i.toUTCString) {
c.expires = i.toUTCString()
}
f = encodeURIComponent(f);
var a = b + "=" + f;
for (var e in c) {
a += "; " + e;
var g = c[e];
if (g !== true) {
a += "=" + g
}
}
document.cookie = a
}
var nodes = getElementsByClassName(classname);
for (var i = 0; i < nodes.length; i++) {
var toggler = document.createElement("A");
toggler.href = "javascript://";
toggler.id = "toggler" + i;
toggler.innerHTML = getCookie("toggler" + i) == "hide" ? "<img src='" + plus + "' alt='' />" : "<img src='" + minus + "' alt='' />";
toggler.onclick = function () {
Next(this.parentNode).style.display = getCookie(this.id) == "hide" ? "" : "none";
setCookie(this.id, getCookie(this.id) == "hide" ? "show" : "hide", {
expires: new Date("01 Jan 2020")
});
this.innerHTML = getCookie(this.id) == "hide" ? "<img src='" + plus + "' alt='' />" : "<img src='" + minus + "' alt='' />";
};
Next(nodes[i]).style.display = getCookie("toggler" + i) == "hide" ? "none" : "";
nodes[i].appendChild(toggler);
}
}
Switchable("h_block");
});
<div class="h_block">Тут будет + или -</div> <div>содержимое блока, которое будет открыватся\закрыватся</div> Вот как переделать <div> в <div class="cont">содержимое блока, которое будет открыватся\закрыватся</div> Именно с классом!?!? :help: |
Гуру вы где!?
|
да все тут, вот только вопрос никто понять не может
|
Нужно
<div>содержимое блока, которое будет открыватся\закрыватся</div>задать класс, и что бы только через этот класс работало! а не чисто через <div> |
makar3000, разбираться в этом кошмаре никто кроме вас не будет.
добавить атрибут класса можно с помощью метода setAttribute(), обратиться, через свойство className или универсальную функцию |
Я просто не могу понять где задается команда что бы выводил в <div> без класса
|
О Боже, я ослеп! Сделайте pretty print вашему коду чтоли... http://jsbeautifier.org/
|
готово
|
Гораздо лучше. Любите свой код, и тогда он полюбит вас)
То, что вам нужно, здесь: Next(this.parentNode).style.display = getCookie(this.id) == "hide" ? "" : "none"; Функция Next - это следующий элемент, после элемента с классом h_block, т.е. ваш простой div. |
Я не очень хорошо понимаю в JS скажите как сделать это под определенный класс? <div class="***">
|
Замените указанную строчку на:
var next = Next(this.parentNode);
if (next.getAttribute("class") && next.getAttribute("class") === "cont") {
next.style.display = getCookie(this.id) == "hide" ? "" : "none";
}
Теперь, элемент скроется только в том случае, если у него есть класс "cont" |
Не работает!
|
Значит вы не правильно сформулировали задачу или я не понял, что вам нужно. Я сказал где копать и показал как копать.
А просто кричать "Не работает!" нет смысла. |
Вы правильно поняли, но там еще в конце кода есть что поправить. Напишите прямо в коде если вас не затруднит
|
Цитата:
|
Да емае поправил и не работает!!!! Добавьте вы в код пожалуйста!!!
|
плохо поправили. попросите человека за деньги поправить код
? |
20 рублей!? Вы же профессионалы, вы код за 2 минуты сделаете))
|
или если профессиональный землекоп идет домой, а к нему солдатик подбегает окоп вскопать, что он ему скажет?
|
зачем загадки?! я же объяснил что не так)) Если не понятно так и скажите... Попробую перефразировать вопрос
|
Цитата:
|
я задетектил у тебя jquery. вот твой же код на твоей же jquery
<script type="application/javascript" src="http://yandex.st/jquery/1.6.2/jquery.min.js"></script>
<script type="application/javascript" src="http://yandex.st/jquery/cookie/1.0/jquery.cookie.min.js"></script>
<div class="h_block">-</div>
<div>содержимое блока, которое будет открыватся\закрыватся</div>
<script type="application/javascript">
// управляющий скрытием\показом
var $this = $(".h_block"),
// что будем скрывать\показывать.
$el = $this.next();
// closing ->
// true, если будем закрывать,
// false, если будем открывать
function toggle(closing){
// укоротил,как мог.
$this.html( closing ? "+" : "-" );
$el[ closing ? "hide" : "show" ]();
// 0 или 1
$.cookie('block_hided', closing*1 );
};
$(function(){
// если сохранено состояние.
var cookie = $.cookie('block_hided');
// передаем Boolean;
if( cookie !== null ) toggle( !!cookie );
})
$(".h_block").click(function(){
// кликнутый эл
$this = $(this);
// эл, с которым будем взаимодействовать
$el = $this.next();
var closing = $el.is(":visible");
toggle( closing );
});
</script>
Цитата:
|
Так а можно сделать допустим что бы было не
<div>содержимое блока, которое будет открыватся\закрыватся</div> а: <span>содержимое блока, которое будет открыватся\закрыватся</span> |
просто поменяй html,там нет привязки к имени тега
|
вообщем проверьте сами скрипт. Он запоминает только закрытие! А когда нажимаешь открыть и перезапускаешь страницу он закрыт.
|
...
а самому поправить?
<script type="application/javascript" src="http://yandex.st/jquery/1.6.2/jquery.min.js"></script>
<script type="application/javascript" src="http://yandex.st/jquery/cookie/1.0/jquery.cookie.min.js"></script>
<div class="h_block">-</div>
<div>содержимое блока, которое будет открыватся\закрыватся</div>
<script type="application/javascript">
// управляющий скрытием\показом
var $this = $(".h_block"),
// что будем скрывать\показывать.
$el = $this.next();
// true, если будем закрывать,
// false, если будем открывать
function toggle(closing){
$this.html( closing ? "+" : "-" );
$el[ closing ? "hide" : "show" ]();
};
$(function(){
// если сохранено состояние.
var cookie = $.cookie('block_hided');
// передаем Boolean;
if( cookie !== null ) toggle( !!(+cookie) );
})
$(".h_block").click(function(){
// кликнутый эл
$this = $(this);
// эл, с которым будем взаимодействовать
$el = $this.next();
var closing = $el.is(":visible");
// 0 или 1
$.cookie('block_hided', closing*1 );
toggle( closing );
});
</script>
|
Когда закрываю один блок, при обновлении страницы закрываются все
Код блоков: <div class="block"> <div class="block_icon"></div> <div class="title">Наш опрос</div> <span> <div class="cont"> lllljhkjhkhk </div> </span> </div> h_block заменил на block_icon |
Код javascript:
<script type="application/javascript" src="http://yandex.st/jquery/1.6.2/jquery.min.js"></script>
<script type="application/javascript" src="http://yandex.st/jquery/cookie/1.0/jquery.cookie.min.js"></script>
<script type="application/javascript">
plus = './images/plus.png';
minus = './images/minus.png';
// управляющий скрытием\показом
var $this = $(".block_icon"),
// что будем скрывать\показывать.
$el = $this.next().next('span');
// true, если будем закрывать,
// false, если будем открывать
function toggle(closing){
$this.html( closing ? "<img src='" + plus + "' alt='' />" : "<img src='" + minus + "' alt='' />" );
$el[ closing ? "hide" : "show" ]();
};
$(function(){
// если сохранено состояние.
var cookie = $.cookie('block_hided');
// передаем Boolean;
if( cookie !== null ) toggle( !!(+cookie) );
})
$(".block_icon").click(function(){
// кликнутый эл
$this = $(this);
// эл, с которым будем взаимодействовать
$el = $this.next().next('span');
var closing = $el.is(":visible");
// 0 или 1
$.cookie('block_hided', closing*1 );
toggle( closing );
});
</script>
|
тебе надо, чтобы у нескольких блоков было сохранение ?
это уже за деньги. и не ко мне ( я ухожу сейчас на неделю ) |
Конечно!! Я же дал тот код...
|
| Часовой пояс GMT +3, время: 23:09. |