2011-02-18 55 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")是‘標準化’