Проблема с функцией щелчка javascript

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Используя следующий код, при нажатии на пункт меню загружается содержимое из внешнего HTML-файла. Когда я нажимаю на каждый пункт меню, содержимое каждого внешнего html-файла остается на странице. Как я могу сделать так, чтобы при нажатии отображалось только содержимое выбранного пункта меню?

 <script type="text/javascript">
        $(function(){
            $("#accordion1").click(function(evt){
                $("#course1").load("course1.html")
                evt.preventDefault();
            })

            $("#accordion2").click(function(evt){
                $("#course2").load("course2.html")
                evt.preventDefault();
            })

            $("#accordion3").click(function(evt){
                $("#course3").load("course3.html")
                evt.preventDefault();
            })
        })
    </script>

<div id="content">
            <div id="course1">
            </div>
            <div id="course2">
            </div>
            <div id="course3">
            </div>
        </div>
  

Ответ №1:

Вы могли бы просто очистить другие элементы, используя $().empty() , но я думаю, что лучшим решением было бы переключить видимость, используя что-то вроде $().toggleClass('hiddenCourse') и display:none CSS, связанный с этим классом.

Кроме того, поскольку извлечение файлов каждый раз будет очень медленным и требовательным к сети, вам следует подумать о том, чтобы запомнить, какие файлы уже были извлечены и включены в DOM.

Альтернативой было бы подготовить весь контент к загрузке страницы, поэтому единственной оставшейся задачей было бы переключение видимости. Это зависит от множества параметров: если сумма содержимого большая (размер и количество файлов), если вы предпочитаете приложение с быстрой адаптивностью в обмен на более медленный запуск, количество разделов, которые посетитель, вероятно, откроет, и так далее.

Ответ №2:

Удалите содержимое других разделов при загрузке html-файла.

Ответ №3:

Похоже, вам нужно что-то вроде эффекта пользовательского интерфейса Accordion

Посмотрите здесь, таким образом, вам нужно загрузить содержимое только один раз. http://docs.jquery.com/UI/API/1.8/Accordion

Также вызов $('#id').empty(); приведет к удалению содержимого.

Ответ №4:

Если я понимаю, вы хотите очистить другие <div> :

 <script type="text/javascript">
    $(function(){
        $("#accordion1").click(function(evt){
            $("#course1").load("course1.html");
            $("#course2").empty();
            $("#course3").empty();
            evt.preventDefault();
        })

        $("#accordion2").click(function(evt){
            $("#course2").load("course2.html");
            $("#course1").empty();
            $("#course3").empty();
            evt.preventDefault();
        })

        $("#accordion3").click(function(evt){
            $("#course3").load("course3.html");
            $("#course1").empty();
            $("#course2").empty();
            evt.preventDefault();
        })
    })
 </script>
  

Ответ №5:

Вы могли бы либо:

  • загрузите пустой URL-адрес в другие разделы перед загрузкой нового содержимого
  • Удалите содержимое всех разделов перед загрузкой нового содержимого
  • Оставьте содержимое, но используйте CSS, чтобы скрыть разделы, у которых не будет события щелчка