HREF модифицируется вне моего контроля ...? - PullRequest
0 голосов
/ 18 февраля 2011

Я не уверен, является ли это jquery, javascript или просто причудой в браузере, но учтите этот код:

for(rowIdx=0;rowIdx<theResultSet.rows.length;rowIdx++) {
  thisLine = $("#TestTemplateLI").clone().attr({'id':'test_'+rowIdx}).appendTo("#test_exerciseListUL");
  thisLine.find('[href*="#pageExercise_EXERCISENUMBER"]').each( function(i) {this.href = this.href.replace('EXERCISENUMBER', rowIdx)} );
}

Цель приведенного выше кода - клонировать элемент списка (<LI>, внедренный ниже) HTML-фрагмент, измените его, чтобы он обращался к якору в другом месте страницы, а затем вставьте его в неупорядоченный список (<UL>).Все это работает, используя чудеса jquery.Проблема в том, что после изменения якорь не работает.Более того, после того, как я изменю HREF программно, он возвращает полный URL, а не просто ссылку на привязку.Пример:

<UL id='testTemplate' style="display:none"> 
    <LI class='arrow' id='testTemplateLI'>
        <a href='#pageExercise_EXERCISENUMBER'>  <!-- THIS is the beast in question -->
            <DIV class='LABELCLASS test_labelContainer'>
                <TABLE height=100% width=100%>
                    <TR valign='center'><TD align='center'>EXERCISELABEL</TD></TR>
                </TABLE>
            </DIV>
            <IMG id='test_checkmark_EXERCISENUMBER' class='test_checkMark_off' src="assets/checkmark.png" width=60px height=54px>
            <DIV id='test_item_EXERCISENUMBER' class='test_exNameContainer'>
                <TABLE height=100% width=100%>
                    <TR valign='center'><TD>EXERCISENAME</TD></TR>
                </TABLE>
            </DIV>
        </a>
    </LI>
</UL>

Итак, происходят две вещи.Во-первых, измененный якорь просто не работает, а во-вторых, что следует изменить с " href = '# pageExercise_EXERCISENUMBER' " на " href = '# pageExercise_0' " (или любым другим текущимИндекс строки ('rowIdx') изменяет его на: " href = 'http://www.mydomain.com/themainpage.php#pageExercise_0'".

Мне нужен способ заставить javascript перестать" помогать "мне в href. Что касается вопроса № 1, я думаю,это связано с # 2.

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

Скотт.

1 Ответ

3 голосов
/ 18 февраля 2011
this.href

Вернет полный URL-адрес, на который указывает якорь.

Вы можете использовать функцию jQuery attr, чтобы вернуть то, что вы хотите:

var $this = $(this);
$this.attr("href", $this.attr("href").replace('EXERCISENUMBER', rowIdx));

Здесь хороший пост, объясняющий, как .attr("href") «нормализуется»

...