动态获取上一个元素,然后在jQuery中单击


Dynamically get previous element then clicked in jQuery

我有一个链接和按钮列表,这些链接和按钮的类名是使用foreach循环在php中动态生成的。输出示例为:

<a class="edit-url-9rwpaZV" href="page/1">This is my title</a>
<button class="edit-btn-9rwpaZV" data-text-swap="Save">Edit</button>
<a class="edit-url-5R8eBR2M" href="page/2">Why tea is great</a>
<button class="edit-btn-5R8eBR2M" data-text-swap="Save">Edit</button>
<a class="edit-url-V7Ma8Olb" href="page/3">Fish are friends</a>
<button class="edit-btn-V7Ma8Olb" data-text-swap="Save">Edit</button>

我有jQuery函数,当按下"编辑"按钮时就会启动,这样我就可以编辑链接的文本并通过ajax保存它。

这些功能的一个示例如下:

$(document).ready(function(){
   editing=false;
   c = $(".edit-url");
   b = $(".edit-btn").click(toggle_edit);
   toggle_edit();
});
function toggle_edit()
{
  switch(editing){
    case true:
      c.get(0).contentEditable = true;
      c.css({background:"#eeeeee"});
      editing=false;
    break;
    case false:
      c.get(0).contentEditable = false;
      c.css({background:"white"});
      editing=true;
  break;
  }
}

以前(在我为每个类名添加唯一标识符之前),当我点击任何按钮时,它会使所有".edit url"链接都可编辑,但我不希望所有字段都可编辑。我只希望每个按钮左侧的字段可编辑(即只有一个字段)。

我想知道的是,如何将通配符/变量添加到选择器中,以便当我单击(例如)"edit-btn-V7Ma8Olb"时,它使"edit-url-V7Ma8 Olb"字段只能编辑,而不能编辑所有其他字段?

解决方案

最终使用。()建议如下:http://jsfiddle.net/1yncv6rf/3/

$(document).ready(function(){
    var editable=1;
    $(".edit-btn").click(function(){
         if(editable == 1){
             $(this).prev().attr('contenteditable','true');
             return editable=2;
         } else if(editable == 2) {
              $(this).prev().attr('contenteditable','false');
              return editable=1;
         }
    });
});

您可以使用jQuery.prve():

$(document).ready(function(){
    editing=false;
    c = $(".edit-url");
    b = $(".edit-btn").click(function(){
        var elementToEdit = $(this).prev();
        switch(editing){
            case true:
            elementToEdit.contentEditable = true;
            elementToEdit.css({background:"#eeeeee"});
            editing=false;
        break;
        case false:
            elementToEdit.contentEditable = false;
            elementToEdit.css({background:"white"});
            editing=true;
        break;
    });
});

我更希望您对$(this)选择器jquery进行一点研究,它只会抓取选中的按钮,然后使用jquery.previous.

找到相对的$(".edit url")DOM对象