2011-02-18 36 views
0

我不知道这是一个jQuery JavaScript或只是一个怪癖的浏览器,但考虑下面的代码:HREF被修改超出我的控制......?

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。提前

感谢,

斯科特。

+0

绑定点击函数,然后使用`window.location的.hash = $(this).attr('href');`看看它是如何工作的:) – Val 2011-02-18 13:17:32

+0

你可能不得不使用live,因为li是动态的,你也可能需要使用e.preventDefault() – Val 2011-02-18 13:18:06

回答

3
this.href 

将返回锚点指向的完全限定URL。

您可以使用jQuery的attr函数返回你想要什么:

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

Here是一个很好的文章,解释如何.attr("href")是‘标准化’