代码之家  ›  专栏  ›  技术社区  ›  jay

jquery遍历-必须有比我更好的方法!

  •  1
  • jay  · 技术社区  · 15 年前

    我想知道是否有人有更好的方法来访问基于我的HTML的元素类型和类型:

    <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或类的原因是,我还使用Ajax动态生成了更多的ID或类。Load和所有元素将具有相同的ID和类。为什么不使用你可能会问的索引呢?好吧,我去过那里,也做到了。实际上,我需要使用更多的代码来重新绑定click事件以包含所有新元素。我要用最简单的方法。

    谢谢!

    更新: 我想强调一个事实,就是我正在使用ajax.load在页面的下方添加相同的元素。由于$_post的原因,它们将有不同的元素名,但我希望我的javascript函数能够处理每个出现的实例。如果我只通过ID引用,那么它将一直更新页面中的所有元素。

    1 回复  |  直到 15 年前
        1
  •  4
  •   karim79    15 年前

    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("");
    }