Вопрос по javascript

[Удален]
382

Подскажите как реализовать.

В тело основного html-кода страницы нужно вставить строку скрипта, который подключает внешний файл, в котором находятся 3 блока:

<div>1</div>

<div>2</div>

<div>3</div>

Нужно, чтобы в тело основной страницы, в том месте, где прописан <scipt ... Выводился рандомом любой из 3-х блоков, расположенных в другом файле (вероятность 1 из 3).

Заранее спасибо.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#1

hejioshin,

<script>

var r=Math.floor(Math.random()*3)+1;

switch (r)

{

case 1: document.write("<div>1</div>");break;

case 2: document.write("<div>2</div>");break;

case 3: document.write("<div>3</div>");

}

</script>

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
Ghost Bear
На сайте с 01.07.2009
Offline
28
#2

Если я правильно понял задачу, то решается это подгрузкой урла с нужным файлом аяксом или же ифреймом (тогда по-хорошему еще надо будет оборачивать ваши дивы в дополнительный код с подключением стилей и прочее). Я бы не рекомендовал средствами javascript резать подругженный файл, а лучше сделать несколько файлов + вам так удобнее будет оперировать этими блоками и не будет привязки по элементу.

Пишу продвинутый веб-софт и автоматизирую сео-задачи на партнёрских условиях. Ваша тема + Мой код = Совместный успех. Велком в ЛС.
[Удален]
#3

Ghost Bear, позвольте уточнить.

Вы рекомендуете сделать из одного файла, содержащего 3 дива 3 разных файла, которые будут содержать по 1 диву и подключать их рандомно? как это реализовать тогда?

T.R.O.N, спасибо.

glab
На сайте с 10.09.2008
Offline
42
#4

T.R.O.N, немного подкорректирую ваш скрипт, т.к. выводить блоки через write не удобно. Предположим, что div'ы уже есть где-то на странице.

Имеем блоки, каждому присваиваем по id:

<div id="block1">1</div>
<div id="block2">2</div>
<div id="block3">3</div>

Далее JS код:

<script>
var r=Math.floor(Math.random()*3)+1;
document.getElementById("block1").style.display='none';
document.getElementById("block2").style.display='none';
document.getElementById("block3").style.display='none';
switch (r)
{
case 1: document.getElementById("block1").style.display='block';break;
case 2: document.getElementById("block2").style.display='block';break;
case 3: document.getElementById("block3").style.display='block';
}
</script>

Сначала все блоки мы делаем невидимыми, а потом рэндомный блок делаем видимым. Думаю смысл понятен.

glab добавил 30.10.2009 в 12:33

Ghost Bear, подгрузку через AJAX следует использовать если блоки большие по объёму, чтобы загружать только необходимое, а не сразу все.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#5
glab:
подгрузку через AJAX следует использовать если блоки большие по объёму

ошибаетесь.

В вашем варианте можно схлопотать санкции от яши...

glab
На сайте с 10.09.2008
Offline
42
#6
ошибаетесь.
В вашем варианте можно схлопотать санкции от яши...

ну да, а если страница будет загружаться, а потом аяксом будет подгружаться контент, то яндекс вообще ничего не проиндексирует. И вообще причём тут поисковики, может ТС какой-нибудь внутренний интерфейс делает. Вопрос индексации это уже другая тема.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#7
glab:
то яндекс вообще ничего не проиндексирует.

если сделать глупо - да. Если сначала подумать, потом сделать - проиндексирует

Ghost Bear
На сайте с 01.07.2009
Offline
28
#8

hejioshin,

Да, три разных файла внутри которых любой контент, который вам нужен - по сути div или нет, не важно. Если же речь о подключении ajax'ом, то тут всё просто - три урла подключемых файлов и код, который рендомно выберет один урл из этих трех и подгружает файлы в нужно место тела странички. И да, индексироваться этот подгружаемый фрагмент не будет.

А вообще по-хорошему это надо реализовывать на стороне сервера при генерации странички.

glab,

Не много не понял, что вы хотели сказать. Насколько я понял у ТСа нет возможности изменить что-то на стороне сервера (лезть в шаблоны, код сайта), он хочет сделать это на стороне клиента - поэтому тут лучшей идеей будет или document.write, как предложил T.R.O.N (при очень малом объеме контента это лучшее решение), а если внутри дива структура посерьезнее, чтобы не извращаться, лучше подгрузить аяксом. Гугл, насколько я помню, кушает контент, выдающийся через document.write, но вот не уверен с Яшей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий