javascript - 如何仅对同一类的一个元素进行更改

标签 javascript jquery

我正在处理的项目需要添加一个新元素并使用编辑按钮对该元素进行更改。我如何才能只针对具有相同类的元素并对其进行更改而不影响具有相同类的其他元素?

CodePen example .

var $input = $("#change");
var $btn = $("#add");
var $btne = $("#edit");
var $content = $("#content");
$btne.hide();


$btn.click( function(){

 var typedInfo = document.getElementById("change").value;
 var item = $('<li></li>');
 item.append(typedInfo);
 $content.append(item);


 $content.on("click","li", function(){
  });

 item.click(function(){
    var clickedItem = $(this);
     $btne.show();
     item.text(" ");
     var typeNew = $('<input type="text" id="newInput" value = "edit">')
   typeNew.click( function(e){
    e.stopPropagation();
  });
     item.append(typeNew);
       $btne.click( function(){
        var editedInput = document.getElementById("newInput").value;
        clickedItem.text(editedInput);
        $btne.hide();
   });
 });

});

最佳答案

首先 id 在同一个文档中应该是唯一的,所以你应该按类替换重复的,例如:

var typeNew = $('<input type="text" class="newInput" value = "edit">')

使用 document.getElementById("newInput") 将定位所有具有此 id 的元素,使用 e.target 仅定位点击了一个:

var editedInput = e.target.value;

代替:

var editedInput = document.getElementById("newInput").value;

您应该将事件 e 传递给点击:

$btne.click( function(e){
//____________________^
    var editedInput = e.target.value;
    clickedItem.text(editedInput);
    $btne.hide();
});

希望这有帮助。

var $input = $("#change");
var $btn = $("#add");
var $btne = $("#edit");
var $content = $("#content");

$btne.hide();

$btn.click( function(){
  var typedInfo = $("#change").val();
  var item = $('<li></li>');

  item.append(typedInfo);

  $content.append(item);
});

$content.on("click","li", function(){
  var clickedItem = $(this);
  var typeNew = $('<input type="text" class="newInput" value="'+clickedItem.text()+'">')
  $btne.show();

  $(this).html(typeNew);

  typeNew.click( function(e){
    e.stopPropagation();
  });
});

$btne.click( function(e){
  $($content).find('li>input').each(function(){
    $(this).parent().text($(this).val());
  })

  $(this).hide();
});
ul {
  display:flex;
  flex-direction:column;
}

li{
  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="change" value="Type Here">
<button id="add">Add Button</button>
<button id="edit">Edit Button</button>

<ul id="content"></ul>

关于javascript - 如何仅对同一类的一个元素进行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40634884/

相关文章:

jquery - 带有 Bootstrap Accordion 的 CakePHP Formhelper

javascript - CSS 中::after 和::before 的区别

javascript - 如何从 JavaScript 网站抓取数据?

javascript - 在表单的高度隐藏粘滞按钮

javascript - jquery添加/删除与另一个div中的提要相同的下拉选项

javascript - 播放 YouTube 视频时执行 JavaScript 函数(使用 YouTube API)

javascript - 将 CSS 样式应用于 Canvas 的一部分

javascript - Json-server 依赖于 uuid 而不是 id

javascript - js : GetElementByID() doesn't return my element

jquery - 如何使用 jquery 插件将对象保存到 session