2009-10-17 15 views
1

我想知道,如果有人有更好的方式來訪問元素#TYPE和#type_new根據我的html:jquery遍歷 - 必須有比我更好的方法!

<tr> 
    <th>Type of Organization</th> 
    <td id="toggle"> 
    <select name="type" id="type"> 
     <option>Church</option> 
     <option>College</option> 
     <option>Theatre</option> 
    </select> 
    <input name="type_new" id="type_new" type="text" />       
    </td> 
</tr> 
<tr> 
    <th>&nbsp;</th> 
    <td><a class="toggle" id="type"><small>Add New Type</small></a></td> 
</tr> 

這裏是我的javascript:

$("a.toggle").unbind('click').click(function(){ 
    $.prev = $(this).parents().parent().prev().find("td#toggle"); 
    $.select = $.prev.find("#type"); 
    $.textbox = $.prev.find("#type_new"); 

    if($.textbox.is(':visible')==true) 
    $(this).find("small").html("Add New Type"); 
    else 
    $(this).find("small").html("Choose From Exisiting Types"); 
    $.select.toggle(); 
    $.textbox.toggle().val(""); 
}); 

我知道有是其他方式來佈局的HTML,使JavaScript更容易,但肯定有人有一個很好的方式基於我當前的HTML。

可能值得注意的是,我不只是通過ID或CLASS引用的原因是我也用ajax .load生成了更多的這些動態,並且所有元素都將具有相同的id和類。爲什麼不使用你可能會問的索引?那麼我已經去過那裏了。我不得不實際使用更多代碼來重新綁定點擊事件以包含所有新元素。我會盡可能以最簡單的方式。

謝謝!

更新: 我想強調一個事實,即使用ajax .load在頁面的更下方添加相同的元素。由於$ _POST的原因,它們會有不同的元素名稱,但我希望我的JavaScript函數能夠處理每個實例。如果我僅通過ID引用它,它將更新頁面中的所有元素。

回答

4

ID應該是唯一的。如果是這樣的話在你的標記的情況下,那麼就不需要複雜的穿越,你可以直接選擇它們,這樣你的前三行代碼可以被省略或代替僅僅是:

$.prev = $("td#toggle"); 
$.select = $("#type"); 
$.textbox = $("#type_new"); 

或您的點擊處理程序的全部內容可以替換爲:

if($("#type_new").is(':visible')) { 
    $(this).find("small") 
      .html("Add New Type"); 
} else { 
    $(this).find("small").html("Choose From Exisiting Types"); 
    $("#type").toggle(); 
    $("#type_new").toggle().val(""); 
} 
+0

您的代碼完全有意義。我想我錯了,當我的ajax請求添加另一節到我的表中的元素是相同的ID相同。由於發佈原因,他們有不同的名字。我給了他們相同的ID,所以每次有新的請求時,我的一段JavaScript將處理它。我有道理嗎? – jay 2009-10-17 01:10:09

+4

如果您將內容附加到您的頁面上,並*複製頁面上存在的* id,則需要重新修改在服務器上生成標記的方式。使用類,例如然後*然後*根據點擊的錨點選擇它們。 – karim79 2009-10-17 01:13:56

+0

正如你以前的代碼更有意義,如果你不*通過ID選擇。 – karim79 2009-10-17 01:15:32

相關問題