2013-10-05 97 views
1

如何将元素添加到最近点击“添加图片”按钮?将元素添加到兄弟

这是HTML结构:

<div class="step" 
    <div class="step-wrapper> 
    <div class="editor"></div> 
    </div> 

    <div class="delete-picture"> 
    <div class="add-picture"> 
</div> 

<div class="step" 
    <div class="step-wrapper> 
    <div class="editor"></div> 
    </div> 

    <div class="delete-picture"> 
    <div class="add-picture"> 
</div> 

<div class="step" 
    <div class="step-wrapper> 
    <div class="editor"></div> 
    </div> 

    <div class="delete-picture"> 
    <div class="add-picture"> 
</div> 

,这里是我的错误的jQuery:

$(document).on('click', '.add-picture', function() { 
    var imageField = $('<img class="link" >'); 
    $(this).parent().find(".step-wrapper").after(imageField); 
}); 

后点击。步骤应该是这样的:

<div class="step" 
     <div class="step-wrapper> 
      <img class="link" > 
     <div class="editor"></div> 
     </div> 

     <div class="delete-picture"> 
     <div class="add-picture"> 
    </div> 

回答

2

我想你想.prepnd(),不.after()使它的第一个子元素。

$(document).on('click', '.add-picture', function() { 
    var imageField = $('<img class="link" >'); 
    $(this).parent().find(".step-wrapper").prepend(imageField); 
}); 

jQuery doc.prepend()

虽然这种风格的代码工作,你也可以使用.closest()略多健壮的代码:

$(document).on('click', '.add-picture', function() { 
    var imageField = $('<img class="link" >'); 
    $(this).closest(".step").find(".step-wrapper").prepend(imageField); 
}); 
2

使用prepend()代替after()

$(this).parent().find(".step-wrapper").prepend(imageField); 

after()地方的内容作为同级,而prepend()使得它的第一个子元素

1

看起来你想要的.editor元素之前要添加的元素,所以尽量

$(document).on('click', '.add-picture', function() { 
    var imageField = $('<img class="link" >'); 
    $(this).parent().find(".step-wrapper .editor").before(imageField); 
}); 

演示:Fiddle

1

2工作演示http://jsfiddle.net/E78VA/1/ & http://jsfiddle.net/E78VA/

另请注意你的HTML DOM不正确,并且有一些小错误我已经纠正了你的HTML。即缺少结束div:)

APIs可以使用的是

希望休息适合的原因:)

代码

$(document).on('click', '.add-picture', function() { 
    var imageField = $('<img class="link" >'); 
    // $(this).parent().find(".step-wrapper").prepend(imageField); 
    $(imageField).prependTo($(this).parent().find(".step-wrapper")); 
    alert($(this).parent().find(".step-wrapper").html()); 
}); 

HTML

<div class="step"> 
    <div class="step-wrapper"> 
     <div class="editor">test</div> 
    </div> 
    <div class="delete-picture">delete</div> 
    <div class="add-picture">add</div> 
</div> 
<div class="step"> 
    <div class="step-wrapper"> 
     <div class="editor"></div> 
    </div> 
    <div class="delete-picture"></div> 
    <div class="add-picture"></div> 
</div> 
<div class="step"> 
    <div class="step-wrapper"> 
     <div class="editor"></div> 
    </div> 
    <div class="delete-picture"></div> 
    <div class="add-picture"></div> 
</div>