#javascript #html #css
#javascript #HTML #css
Вопрос:
Если бы у меня был блок HTML-кода, стилизованный с помощью css, такой как этот:
<title>Test Title 1</title>
<p>Test Paragraph 1<p>
<a href="test link1">test link 1</a>
<title>Test Title 2</title>
<p>Test Paragraph 2<p>
<a href="test link2">test link 2</a>
<title>Test Title 3</title>
<p>Test Paragraph 3<p>
<a href="test link3">test link 3</a>
Я хочу иметь возможность отображать набор частей случайным образом вместе (т.Е. Только Заголовок 1, абзац 1 и ссылка 1). Затем, если я обновляю его случайным образом, отображается 1, 2 или 3. Но они должны оставаться вместе, например, части 1 не могут отображаться с частью 3 и так далее.
Я знаю, что это просто, но я не могу понять, как заставить их отображаться случайным образом вместе. Заранее спасибо!
Комментарии:
1. можете ли вы поделиться тем, что пробовали до сих пор?
2.Если им нужно оставаться вместе, было бы лучше сгруппировать их вместе в
<div>
элементе; кроме того, у вас должен быть только один<title>
элемент, и он должен быть внутри<head>
.
Ответ №1:
Первый шаг — сгруппировать все связанные части вместе. Смотрите HTML ниже. Обратите внимание, что теги заголовка были заменены тегами заголовка. Заголовок должен быть в заголовке страницы.
<section>
<h2>Test Title 1</h2>
<p>Test Paragraph 1</p>
<a href="test link1">test link 1</a>
</section>
<section>
<h2>Test Title 2</h2>
<p>Test Paragraph 2</p>
<a href="test link2">test link 2</a>
</section>
<section>
<h2>Test Title 3</h2>
<p>Test Paragraph 3</p>
<a href="test link3">test link 3</a>
</section>
Затем в CSS вам нужно их скрыть:
section {
display: none;
}
И вот материал jQuery:
$("section").eq(Math.floor(Math.random() * 3)).css("display", "block");
Вот jsfiddle: http://jsfiddle.net/Aej52 /
Комментарии:
1. Не могли бы вы предоставить скрипку для этого решения, пожалуйста?
2. Посмотрите обновленный код и вот jsfiddle: jsfiddle.net/Aej52 . Имейте в виду, что входные данные функции jQuery eq() представляют собой индекс, основанный на 0.
3. PS По возможности всегда позволяйте браузеру выполнять большую часть работы.
4. Работает идеально!! Спасибо!
Ответ №2:
используйте метод jquery appendTo
html-код:
<div id = " titleBox">
</div>
поместите этот javascript в событие onload или документ готов
тестовую ссылку установите сами
function showTitle(){
var rand = Math.floor((Math.random() * 3) 1);
$("<title>Test Title " rand "</title>
<p>Test Paragraph " rand "<p>
<a href="test link">test link " rand "</a>"
).appendTo("#titleBox");
}
Ответ №3:
Вот простая версия javascript — без jquery, с рабочей демонстрацией
HTML
<title>Test Title 1</title>
<!-- correctly close paragraph tags -->
<p>Test Paragraph 1</p>
<a href="test link1">test link 1</a>
<title>Test Title 2</title>
<p>Test Paragraph 2</p>
<a href="test link2">test link 2</a>
<title>Test Title 3</title>
<p>Test Paragraph 3</p>
<a href="test link3">test link 3</a>
Javascript
// get references to elements in question, and store them...
var titles = document.getElementsByTagName("title");
var ps = document.getElementsByTagName("p");
var as = document.getElementsByTagName("a");
// every now and then, run a function...
setInterval(function(){
// set all elements to display none
for(i=0;i<ps.length;i ){
// add one to offset page title - not part of demo code
titles[i 1].style.display = "none";
as[i].style.display = "none";
ps[i].style.display = "none";
};
// choose a lucky winner...
var choice = Math.floor(Math.random()*(ps.length));
// make the randomly chosen index item show...
as[choice].style.display = "block";
ps[choice].style.display = "block";
// add one to offset page title - not part of demo code
titles[choice 1].style.display = "block";
}, 1000)
Ответ №4:
Одним из вариантов является создание элементов с помощью JavaScript:
JS:
$(function () {
var data = [
{
h1: 'Test Title 1',
p: 'Test Paragraph 1',
a: { href: '#test-link1', text: 'Test Link 1' }
},
{
h1: 'Test Title 2',
p: 'Test Paragraph 2',
a: { href: '#test-link2', text: 'Test Link 2' }
},
{
h1: 'Test Title 3',
p: 'Test Paragraph 3',
a: { href: '#test-link3', text: 'Test Link 3' }
}
];
//-- select an item at random
var index = Math.floor( Math.random() * data.length );
var item = data[index];
//-- create the HTML elements
var $placeholder = $('#placeholder');
$('<h1>').text(item.h1).insertAfter($placeholder);
$('<p>').text(item.p).insertAfter($placeholder);
$('<a>').attr('href', item.a.href).text(item.a.text).insertAfter($placeholder);
});
HTML:
<div id="placeholder"></div>
В этом примере я использовал заполнитель div
, чтобы отметить, куда будут вставлены элементы.