Лучший способ разместить ненавязчивую информацию на веб-странице - PullRequest
4 голосов
/ 04 декабря 2008

Итак, у меня есть несколько написанных мной скриптов, которые настраивают карту Google на моей странице. Эти сценарии включены в <head> моей страницы и используют jQuery для построения карты с маркерами, сгенерированными из списка адресов на странице.

Однако у меня есть точные координаты для каждого адреса, которые требуются JavaScript для правильного размещения маркеров. Это не та информация, которую я хочу видеть пользователю на экране, так каков наилучший способ поместить эти данные в мой документ?

Ответы [ 7 ]

1 голос
/ 04 декабря 2008

Гарет, вы можете взглянуть на JSON на http://www.json.org/

Помимо компактности, он получил мощную поддержку на стороне сервера, и, если в будущем вы решите динамически загружать координаты с помощью HTTPRequest, это будет очень легко сделать без значительного изменения существующего сценария.

JSON - Нотация объектов JavaScript по сути является родным способом сериализации объектов JavaScript.

Некоторые примеры здесь: http://www.json.org/example.html

Вы даже можете хранить всю информацию об адресе в массиве JavaScript объектов, записанных в JSON, и динамически создавать список на экране. Это даст вам возможность легко сортировать, фильтровать и манипулировать адресами любым образом во время выполнения.

Альтернативный способ состоит в том, чтобы охватить каждый адрес тегом (подойдет простой div) и ввести новый атрибут для тега, содержащего координаты:

<div id="addr1" coordinates="...">
    17 Coldwell Drive<br />
    Blue Mountain<br />
    BA93 1PF<br />
    United Kindom
</div>

тогда

var myCoordsCSV = $("addr1").coordinates;

Вы можете объединить второй подход с JSON (сохранить объект координат), если хотите, или добавить два атрибута для каждой координаты или сохранить список с разделителями-запятыми и т. Д.

Второй подход также значительно ухудшается и удобен для поисковых ботов.

1 голос
/ 04 декабря 2008

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

Вы можете сохранить его в переменной javascript или добавить форму со скрытыми значениями, такими как эта (внутри неиспользованной формы, чтобы убедиться, что она проверена):

<form action="#" method="get" id="myHiddenValues">
   <input type="text" name="hiddenval1" id="hiddenval1" value="1234"/>
   <input type="text" name="hiddenval2" id="hiddenval2" value="5678"/>
</form>

который вы можете читать и обновлять из JavaScript.

1 голос
/ 04 декабря 2008

Моей первой мыслью был скрытый ввод данных в формате CSV или аналогичный. Поскольку данные на самом деле не являются секретными, просто не для отображения.

 <input id="coordinates" type="hidden" value="123.2123.123:123,123,321;....." />

Тогда получите к нему доступ с помощью jquery

 var myCoordsCSV = $("#coordinates").val();

Изменить: В приведенном ниже ответе упоминается JSON, который будет лучшим решением в сочетании с использованием нескольких скрытых входов, как указано в другом ответе.

0 голосов
/ 04 декабря 2008

При хранении данных в Javascript или JSON отсутствует пункт о ненавязчивом Javascript. Одна из ключевых вещей в «ненавязчивом» - это изящное унижение, когда Javascript отсутствует, и в идеале, когда нет и CSS. По этой причине вы должны поместить данные в документ, а не в Javascript, чтобы пользователи могли его видеть.

Кроме того, вы должны представить его в виде таблицы или структуры div, которая выглядит чистой без какого-либо CSS. В этом случае таблица, вероятно, является правильной семантической структурой для представления данных такого типа. Вы можете дополнительно оформить таблицу для тех, у кого есть CSS, но нет Javascript. Затем Javascript может легко анализировать данные и помещать их в карту, но если Javascript не поддерживается, данные все равно будут отображаться.

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

Теперь вы не хотите делать таблицу видимой по умолчанию, поэтому вам придется скрыть ее с помощью CSS. Но что, если у пользователя есть CSS, но нет Javascript? Тогда вы, вероятно, захотите показать таблицу ... это то, что грациозно унизительно. Поэтому вы должны сделать таблицу видимой в CSS (т.е. не скрывайте ее явно), а затем запустить Javascript, чтобы скрыть ее при инициализации:

document.getElementById("geodata").style.display = "none";

или некоторый специфичный для библиотеки эквивалент, например

$("geodata").hide()

Единственная проблема заключается в том, что если вы запустите это в document.onload (), таблица будет видна в течение нескольких секунд. Поэтому включите его в тег скрипта сразу после вывода таблицы. Это одна из ситуаций, когда можно включить тег HTML в HTML. Если вы это сделаете, то избегайте использования специфичного для библиотеки кода, поскольку библиотека может еще не загрузиться к моменту оценки вашего встроенного скрипта.

Теперь у вас есть все случаи: - JS и CSS - данные представлены на карте - нет JS, но CSS - данные представлены красиво в таблице - без JS и без CSS - данные представлены в необработанной HTML-таблице (другой случай, JS и отсутствие CSS возникают редко, вы можете разобраться с этим, если хотите, но отчасти бессмысленно)

Ваш код Javascript также будет чистым, потому что он анализирует аккуратно сконструированную структуру данных. Вы можете легко проверить таблицу во время разработки, чтобы увидеть, имеет ли она правильные данные и правильно ли карта отображает эти данные.

0 голосов
/ 04 декабря 2008

Данные всегда будут видны тем, кто хочет к ним добраться. Попытка скрыть это только замедлит тех, кто не знает этого. Я предлагаю не использовать XHR, так как он медленный для многих людей и всегда добавляет время к загрузке страницы, что вы должны попытаться минимизировать использовать массив.

var myArray = new Array();  
myArray.push([1.000,1.000,"test1"]);  
myArray.push([2.000,2.000,"test2"]);  
myArray.push([3.000,3.000,"test3"]);  
for(i=0;i<myArray.length;i++){  
    yourGoogleMapsAPICall(myArray[i][0],myArray[i][1],myArray[i][2]);  
}  

Что-то вроде тебя?

0 голосов
/ 04 декабря 2008

Поскольку у вас уже есть Jquery, почему бы просто не сделать AJAX-вызов на другую страницу / скрипт для получения координатных данных?

0 голосов
/ 04 декабря 2008

Если информация не должна быть видна пользователю, она не должна оставаться в документе. Данные могут оставаться в области сценария, например. Однако, если по разным причинам это невозможно, вы можете использовать div с style = "display: none", который будет скрывать информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...