2012-05-21 4 views
2

следующие работы по замене DIV с новым DIV ...Javascript заменить DIV на каждый клик

<div id = "div1" style="display:block" onclick = "replace()"><img src="1.jpg" /></div> 

<div id = "div2" style="display:none"><img src="2.jpg" /></div> 

<script type = "text/javascript"> 
function replace() { 
document.getElementById("div1").style.display="none"; 
document.getElementById("div2").style.display="block"; 
} 

</script> 

То, что я не могу понять, как сделать эту работу таким образом, когда вы нажимаете div2 его заменены на div3 и так далее.

Другими словами, я хочу заменить div на каждый клик больше, чем один раз. Каков наилучший способ сделать это? Я новичок, поэтому не уверен, что выше это хорошее начало или нет.

Спасибо!

+1

Что значит «заменить»? Вы хотите, всякий раз, когда вы нажимаете на 'div', чтобы скрыть *, что' 'div' и показывать следующий после него? – Sampson

ответ

3

Вы могли бы сделать более общую функцию:

function replace(hide, show) { 
    document.getElementById(hide).style.display="none"; 
    document.getElementById(show).style.display="block"; 
} 

Затем вы можете создать много дивы и использовать ту же функцию:

<div id = "div1" style="display:block" onclick = "replace('div1','div2')">...</div> 
<div id = "div2" style="display:none" onclick = "replace('div2','div3')">..</div> 
<div id = "div3" style="display:none" onclick = "replace('div3','div4')">..</div> 
... 
+0

Вы также можете поменять первую переменную на «this»: replace (this, 'div2') ... и т. Д. – bozdoz

2

Я предлагаю вам некоторые лучшие практики в этом ответе:

  • Используйте классы вместо свойства стиля, это лучше для браузера.
  • Не используйте встроенный обработчик событий. См. Пример ниже.
  • Это не «замена», которую вы ищете, это «переключение».
  • Предлагаю вам использовать пузырьки событий. Таким образом, вы добавляете одно единственное событие в контейнер вашего div, и вы можете работать над этим.

Хорошо, теперь для примера:

HTML:

<div id="container"> 
    <div id="div1">..</div> 
    <div id="div2" class="hidden">..</div> 
    <div id="div3" class="hidden">..</div> 
</div> 

JS:

// Notice how I declare an onclick event in the javascript code 
document.getElementById('container').onclick = function(e) { 

    // First, get the clicked element 
    // We have to add these lines because IE is bad. 
    // If you don't work with legacy browsers, the following is enough: 
    //  var target = e.target; 
    var evt = e || window.event, 
     target = evt.target || evt.srcElement; 

    // Then, check if the target is what we want clicked 
    // For example, we don't want to bother about inner tags 
    // of the "div1, div2" etc. 
    if (target.id.substr(0, 3) === 'div') { 

     // Hide the clicked element 
     target.className = 'hidden'; 

     // Now you have two ways to do what you want: 
     //  - Either you don't care about browser compatibility and you use 
     //  nextElementSibling to show the next element 
     //  - Or you care, so to work around this, you can "guess" the next 
     //  element's id, since it remains consistent 
     // Here are the two ways: 

     // First way 
     target.nextElementSibling.className = ''; 

     // Second way 
     // Strip off the number of the id (starting at index 3) 
     var nextElementId = 'div' + target.id.substr(3); 
     document.getElementById(nextElementId).className = ''; 
    } 
}; 

И конечно, CSS:

.hidden { 
    display: none; 
} 

Я настоятельно рекомендую вам прочитать комментарии в javascript-коде.

Если вы внимательно прочитали, вы увидите, что в современных браузерах код JS - это вопрос из 5 строк. Больше не надо. Для поддержки старых браузеров требуется 7 строк.

+0

Спасибо за указатели. Я пробовал этот метод в FF и Chrome (пробовал ваш первый, а затем второй), но после первого щелчка div становится скрытым и не отображает следующий div. – user1373779

+0

Я полагаю, вы сделали что-то не так? Вот jsfiddle, показывающий код, который работает: http://jsfiddle.net/Ralt/EPKwT/ –

+0

Очень странно ... Мне что-то не хватает. Работает отлично в jsfiddle, но когда я копирую/вставляю код, который у вас есть в jsfiddle, в пустой HTML-документ для тестирования, он не работает ни в одном браузере. Просто показывает «1», и щелчок по div ничего не меняет («1» остается). – user1373779

Смежные вопросы