Относительно просто. В функции, которая преобразует ваши ловушки [popup], определите var counter = 0
перед циклом .each
. Внутри цикла выполните итерацию счетчика и используйте это число для генерации уникальных данных / разметок, которые вы применяете из цикла.
Это довольно краткое описание решения. Если вам нужно больше деталей, просто дайте мне знать.
edit: Кажется, проблема не в самом хранилище, а в идентификации и получении контроля над URL. Вы должны иметь возможность хранить URL в произвольно названном атрибуте в теге привязки. Это будет технически «незаконный» тег, поэтому он ничего не будет делать, но он будет там, он не будет ничего мешать, и вы сможете легко вытащить его с помощью функции jquery .attr()
.
Получение самого URL-адреса, чтобы вы могли поместить его в выбранный вами атрибут, вероятно, лучше всего сделать с помощью javascript split()
. Сначала разделим на «[popup]». Это даст вам массив, где первый элемент начинается в начале текстового блока, а каждый последующий элемент начинается сразу после «[popup]». Затем разделите каждый из них (кроме первого) на ''. Это даст вам массив этого элемента, разделенный пробелами - это означает, что первым элементом в массиве (как вы мне его описали) должен быть искомый URL.
edit2:
$("li:contains('[popup]')").each(function() {
var text = $(this).text();
//by my understanding of split(), the [0] element in the array would be the
//bit before the "[popup]" string, so we want the [1] element.
var splittext = text.split("[popup]")[1];
var splitsplittext = splittext.split[" "];
//by my understanding of the way you've presented the use rules, the [0]
//element of splitsplittext ought to contain your path now. If you want
//to make it more robust (say, allowing the user to put an optional space
//between the "[popup]" and the path) then the logic here gets more
//complicated.
$(this).attr("pathHolder", splitsplittext[0]);
}
Как только вы это сделаете, в любое время, когда у вас есть <li>
, вы можете позвонить $liNode.attr("pathholder")
, чтобы получить адресную строку
edit3: несколько мыслей ...
- Вы устанавливаете несколько классов, добавляя пробелы вручную. Мое понимание хорошей практики кодирования подсказывает, что вы должны просто вызывать addClass несколько раз.
- Вы делаете много вещей с селекторами, что вы должны делать с переменными. Например, вы используете $('li.pop'+nextnumber)
, когда можете просто продолжать использовать $(this)
. Вы добавляете класс к стрелке, чтобы вы могли использовать $('li.arr'+nextnumber)
, когда вы могли просто сказать что-то вроде $thisArrow = $(this).prev()
, а затем использовали $thisArrow
, когда вам нужно было сослаться на вещь.
- когда вы определяете диалог, вам не нужно использовать var $dialog =
- вам нужно всего лишь var
или $
. var
означает, что это переменная javascript, что означает, что она строго ограничена. $
означает, что это объект JQuery, что означает, что он по существу ограничен областью страницы. К сожалению, ни то, ни другое не поможет вам, поскольку ваш код написан. Версия javascript уничтожит себя почти сразу, так как вы можете перейти к концу функции, а версия JQuery перезапишет себя в следующем цикле каждого цикла. Для того, чтобы сохранить его должным образом, вам придется где-то записать его. Кроме того, я уверен, что JQuery посмотрит на $('<div></div>')
и просто запутается. Похоже, он пытается быть селектором и терпит неудачу.