克隆所选event.target的父div

时间:2018-09-06 13:02:49

标签: javascript jquery html

当我右键单击链接时,我想获取其父div的所有代码,应该在此div之后将其克隆。

我尝试了一些代码,但是它不起作用,请在下面查看我的代码并纠正我。另请指导如何删除所选的父项myStructure.str01

下面是我的代码:

div
// when we're about to show the context menu, show our own instead
$(document).on("contextmenu", function(event) {
  // Avoid the real one if this is the link
  if ($(event.target).hasClass("sim-row-edit")) {
	  console.log("right click identified");
	 
	 // add border
	 $(event.target).parent().addClass("selected");
	 
    event.preventDefault();
	clicked_link = $(event.target).text();
	clicked_url = $(event.target).attr("href");
	clicked_id = $(event.target).attr("id");
	
	//$(event.target).text("ttt");
	
	//alert(clicked_link);
    // Show contextmenu
    $(".custom-menu").show(100).
    css({
      top: event.pageY + "px",
      left: event.pageX + "px"
    });
  }
});

// hide our context menu when the document is clicked
$(document).on("mouseup", function() {
  $(".custom-menu").hide(100);
  $(".selected").removeClass("selected");

});

$(".custom-menu li").click(function() {
  //alert("hii2");
  // This is the triggered action name
  switch ($(this).attr("data-action")) {
    // A case for each action. Should personalize to your actions
    case "first":
     // console.log("first");
	   console.log("-----");
	   console.log(clicked_link);
	   console.log(clicked_url);
	   console.log(clicked_id);
	   
	   
	   //trying to clone the div using below code but it is not working.
	   thisDiv = $(event.target).parent();
	   $(thisDiv).clone().insertAfter(thisDiv);
	
	  //console.log($(this).parent().text());
      break;
    case "second":
      console.log("second");
      break;
    case "third":
      console.log("third");
      break;
  }
});
.custom-menu {
  display: none;
  z-index: 1000;
  position: absolute;
  background-color: #fff;
  border: 1px solid #ddd;
  overflow: hidden;
  width: 120px;
  white-space: nowrap;
  font-family: sans-serif;
  -webkit-box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
  -moz-box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
  box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
}

.custom-menu li {
  padding: 5px 10px;
}

.custom-menu li:hover {
  background-color: #4679BD;
  cursor: pointer;
}

.selected {
  border: 1px solid red;
}

1 个答案:

答案 0 :(得分:1)

在您的代码示例中,事件处理程序/opt/letsencrypt/letsencrypt-auto --debug $(".custom-menu li").click= function() { ... }指向event.target元素,获取其li会得到parent元素,该元素将被克隆并插入ul内,以提供一个嵌套列表,即上下文菜单内的上下文菜单。

要解决此问题,请在右键单击时引用clicked元素以及其他属性,并在此事件处理程序内部进行引用以进行克隆。请参阅代码以进行理解。

ul
// when we're about to show the context menu, show our own instead
$(document).ready(function() {
  console.log('Document ready');
});

$(document).on("contextmenu", function(event) {
  // Avoid the real one if this is the link
  if ($(event.target).hasClass("sim-row-edit")) {
    console.log("right click identified");

    // add border
    $(event.target).parent().addClass("selected");

    event.preventDefault();
    target_element = $(event.target);
    clicked_link = $(event.target).text();
    clicked_url = $(event.target).attr("href");
    clicked_id = $(event.target).attr("id");

    //$(event.target).text("ttt");

    //alert(clicked_link);
    // Show contextmenu
    $(".custom-menu").show(100).
    css({
      top: event.pageY + "px",
      left: event.pageX + "px"
    });
  }
});

// hide our context menu when the document is clicked
$(document).on("mouseup", function() {
  $(".custom-menu").hide(100);
  $(".selected").removeClass("selected");

});

$(".custom-menu li").click(function() {
  //alert("hii2");
  // This is the triggered action name
  switch ($(this).attr("data-action")) {
    // A case for each action. Should personalize to your actions
    case "first":
      // console.log("first");
      console.log("-----");
      console.log(clicked_link);
      console.log(clicked_url);
      console.log(clicked_id);
      console.log(target_element);


      //trying to clone the div using below code but it is not working.
      console.log(event.target);
      thisDiv = target_element.parent();
      thisDiv.clone().insertAfter(thisDiv);

      //console.log($(this).parent().text());
      break;
    case "second":
      console.log("second");
      break;
    case "third":
      console.log("third");
      break;
  }
});
.custom-menu {
  display: none;
  z-index: 1000;
  position: absolute;
  background-color: #fff;
  border: 1px solid #ddd;
  overflow: hidden;
  width: 120px;
  white-space: nowrap;
  font-family: sans-serif;
  -webkit-box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
  -moz-box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
  box-shadow: 2px 2px 7px 0px rgba(50, 50, 50, 0.5);
}

.custom-menu li {
  padding: 5px 10px;
}

.custom-menu li:hover {
  background-color: #4679BD;
  cursor: pointer;
}

.selected {
  border: 1px solid red;
}