Отображение элемента associative array при клике
Доброго времени суток,
Не могу понять как при нажатии на div получить содержимое array. Понятно, что получить элемент associative array можно так: exampleArray[i].key; Но я не очень понимаю как это реализовать в коде. Мой код тут [JSfiddle] Спасибо заранее. |
Переписала сюда код для надежности
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> #selectedNews { border : 1px solid gray; margin : 10px; padding : 5px; } .news{ background-color : green; border : 2px solid black; padding : 4px; margin-top : 2px; text-align : center; } </style> <script> var newsListData = [ { "group" : "science", "title" : "Текст тут", "image" : "images/news1.jpg", "content" : "Много текста." }, { "group" : "science", "title" : "Название", "image" : "images/news2.jpg", "content" : "Очень много текста" }, { "group" : "science", "title" : 'Название', "image" : "images/news3.jpg", "content" : "Много текста" }, { "group" : "economics", "title" : 'Еще название', "image" : "images/news4.jpg", "content" : "Очень много текста" }] var selected; function showMore() { // пустой элемент selected selected.innerHTML = ""; // потомок элемента, на которого наведена мышь for (var i = 0; i < this.children.length; i++) { // клонирую элементы и отправляю в selected selected.appendChild(this.children[i].cloneNode(true)); } } // элементы к показу document.addEventListener("DOMContentLoaded", function() { // Выбор элементов var selectedNews = newsListData; for (var i = 0; i < selectedNews.length; i++) { // Добавляю listeners selectedNews[i].addEventListener("click", showMore); } selected = document.getElementById("selectedNews") }); </script> </head> <body> <div id="newsList"> <input type="text" placeholder="filter..." id="filter"/> <div class="list"> <div id="0-news" class="news">One</div> <div id="1-news" class="news">Two</div> <div id="2-news" class="news">Three</div> <div id="3-news" class="news">Last one</div> <article id="selectedNews"> <h1>Titre</h1> <figure> <img src="" alt="titre"/> </figure> <div id="content"> bla bla </div> </article> </body> </html> |
Получилось что-то вроде того,если кому-то было интересно https://jsfiddle.net/qqyvu3dm/4/
Думаю завернуть это в цикл. |
Честно говоря я даже глядя на результат так и не понял чего надо то сделать было :)
|
Цитата:
<meta charset="utf-8"> <style> .news { cursor: pointer; border: solid 1px; } </style> <div class="list"> <div id="0-news" class="news">One</div> <div id="1-news" class="news">Two</div> <div id="2-news" class="news">Three</div> <div id="3-news" class="news">Last one</div> </div> <script> (function () { var newsListData = [ { "group" : "science", "title" : "Текст тут", "image" : "images/news1.jpg", "content" : "1 Много текста." }, { "group" : "science", "title" : "Название", "image" : "images/news2.jpg", "content" : "2 Очень много текста" }, { "group" : "science", "title" : 'Название', "image" : "images/news3.jpg", "content" : "3 Много текста" }, { "group" : "economics", "title" : 'Еще название', "image" : "images/news4.jpg", "content" : "4 Очень много текста" }]; document.querySelector(".list").addEventListener("click", function (e) { if (e.target.className == "news") { e.target.innerHTML = newsListData[ Array.prototype.indexOf.call( this.querySelectorAll(".news"), (e.target) )].content; } }); })(); </script> |
http://learn.javascript.ru/behavior
Так тоже вариант. |
golden_yuna, существует 2 способа "привязать" что-либо к элементу в разметке:
1. используюя аттрибуты html элемента 2. используя св-ва DOM объекта подробнее здесь Как ты могла заметить, атрибуты весьма удобны ввиду своей наглядности. Однако, на практике так никто не делает, просто потому, что у тебя функция display() лежит в глобале (window). Конечно, можно и так залепить window.foo.display(), но все равно ты упрешся в то, что тебе нужен шаблонизатор для работы с разметкой. Допустим, ты заюзаешь любой из множества шаблонизаторов и поймешь, что это действтительно удобно. После этого ты столкнешься с необходимостью биндить обработчики событий, не пробрасывая их в глобал + тебе потребуется условный рендеринг + динамическая привязка данных и т.д. Т.о., если ты интересуешься в учебных целях, см. первый абзац. Если тебе нужно "запилить" приложение/компонент, как правило, исопльзуют библиотеки/фреймворки. Пример с импользованием библиотеки vue.js https://jsfiddle.net/he4gw9nh/1/ Нетрудно заметить, что количество кода для реализации простой задачи? сокращается в разы (за счет декларативности и реактивности). |
aklis, хах, я поняла, что криво объяснила. есть список из див элементов, каждый из них привязан к элементу array, нужно чтобы контент этого array отображался при клике на див, в элементе #example, к примеру.
я уже поняла как все сделать, спасибо всё равно за ответ |
Часовой пояс GMT +3, время: 11:21. |