jquery - 使用onclick和.before向页面添加新内容

时间:2015-09-30 16:22:11

标签: javascript jquery html

我是jQuery的新手,但我开始关注它(我认为)。我有一个切换ul(新餐厅)作为按钮,当我点击ul按钮我希望按钮在预先存在的新餐厅按钮上方创建一个新的切换。

例如在

之前

enter image description here

enter image description here

我真的想自己解决这个问题,但是我想请一点指导。目前没有任何事情发生,如下所示:

enter image description here

下面的

脚本:

 $(document).ready(function(){
           $('li#order_open').click(function(){
              var $newRestaurant = $('<li id="order_open">New restaurant <a href="Menu.php";></a></li>');
              $('li').before($newRestaurant);
               });
               
  <!--Restaurant toggle-->
            <a id="restt" class ="header"href="#" onclick="toggleVisibility('Rest');"><h3 id="open">Your Restaurants</h3></a>
            <div id="Rest" style="display: none;"><div>

                    <ul class="tabs">
                        <!--                    <li id="order" class="rred"><a href="Franchise-account-orders.php">restaurant</a></li>-->
                        <li id="order_open" class="rgreen"><a href="javascript:void(0);">New restaurant</a></li>

                    </ul>

我也尝试过:

 $(document).ready(function(){
           $('li#order').click(function(){
               $('li#order').before('<li id="order">New restaurant <a href="Menu.php";></a></li>');
               });
 <a id="restt" class ="header"href="#" onclick="toggleVisibility('Rest');"><h3 id="open">Your Restaurants</h3></a>
            <div id="Rest" style="display: none;"><div>

                    <ul class="tabs">
                        <!--                    <li id="order" class="rred"><a href="Franchise-account-orders.php">restaurant</a></li>-->
                        <li id="order_open" class="rgreen"><a href="javascript:void(0);">New restaurant</a></li>

                    </ul>

4 个答案:

答案 0 :(得分:1)

我希望,我理解你的问题。您可以通过以下方式在元素之前添加内容:

 $(document).ready(function(){
     $('#order_open').click(function(){
         //HTML you want to add
         var $newRestaurant = '<li id="order_open">New restaurant<a href="Menu.php";></a></li>';
         //insert before your clicked button
         $(this).before($newRestaurant);
     });
});

我为你做了一个小提琴:http://jsfiddle.net/6o593keg/

如果您想在插入的按钮上使用事件处理程序,则必须在插入新元素后添加新的事件处理程序:

$(this).click(...)

答案 1 :(得分:1)

您似乎在此行中创建了新的jquery元素:

var $newRestaurant = $('<li id="order_open">New restaurant <a href="Menu.php";></a></li>');

所以$ newRestaurant不是指向你点击的(选中的)li,而是指向甚至没有附加到DOM的新元素。

您应该使用$(this)来引用附加元素。

根据文件http://api.jquery.com/on/

  

当jQuery调用一个处理程序时,this关键字是对它的引用   事件交付的元素;对于直接绑定的事件   这是附加事件和委托事件的元素   事件这是一个元素匹配选择器。 (请注意,这可能不是   如果事件来自后代,则等于event.target   element。)从元素创建一个jQuery对象,以便它可以   与jQuery方法一起使用,使用$(this)

答案 2 :(得分:0)

您不能拥有多个具有相同ID的HTML元素,您应该增加id或使用class作为选择器

var $newRestaurant = $('<li class="order_open">New restaurant <a href="Menu.php";></a></li>');

答案 3 :(得分:0)

你不应该在动态内容中使用id,而是使用class。

如果您只想在单击它时复制其上方的列表项,则可以使用clone()方法,如下所示:

&#13;
&#13;
$(document).ready(function() {
  $('.tabs').on('click','li.order_open', function() {
    $(this).before($(this).clone()); // or any custom content
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!--Restaurant toggle-->
<a id="restt" class="header" href="#" onclick="toggleVisibility('Rest');"><h3 id="open">Your Restaurants</h3></a>
<div id="Rest">
  <div>
    <ul class="tabs">
      <li class="rgreen order_open"><a href="javascript:void(0);">New restaurant</a>
      </li>
    </ul>
&#13;
&#13;
&#13;

请注意,您应该使用event delegation,以便处理程序也适用于注入的元素。