[英]Add an image in existing HTML element with JS/Jquery
在我的網頁上有Gridster小部件。這些小部件中都有可以刪除的圖像。現在我有一個+
按鈕,當用戶點擊它時會打開一個顯示圖像列表的模態。現在我希望用戶選擇一個圖像(點擊然后按Add Image
然后在指定的小部件中Add Image
。
此外,其在模態顯示的圖像是從服務器中檢索,所以我不能手動放置元素像id
來區分他們。我想this
在jQuery將在得到一個與該clicked.Along特定圖像幫助添加圖像應該具有相同的結構像現有的圖像。
'<div class="imagewrap"><img src= image i click > <input type="button" class="removediv" value="X" /></div></div>';
我還想用我添加的圖像的src
更新textarea
字段,就像它與其他現有圖像一樣。
HTML:
<div class="gridster">
<ul>
</ul>
</div>
<button class="js-seralize btn btn-success mr-2">Serialize</button>
<textarea id="log"></textarea>
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Add Icons</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<img src="https://cdnd.icons8.com/wp-content/uploads/2015/07/Run-Command-100.png">
<img src="https://png.icons8.com/metro/2x/chapel.png">
<img src="https://png.icons8.com/metro/2x/boy.png">
<img src="https://png.icons8.com/metro/2x/wacom-tablet.png">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Add Image</button>
</div>
</div>
</div>
</div>
JS:
var gridster;
gridster = $(".gridster ul").gridster({
widget_base_dimensions: [100, 100],
widget_margins: [5, 5],
helper: 'clone',
serialize_params: function($w, wgd) {return {images: $w.find('textarea').val().trim() , col: wgd.col, row: wgd.row, size_x: wgd.size_x, size_y: wgd.size_y}},
resize: {
enabled: true
}
}).data('gridster');
var json = [{
"html": "https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png,https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png,https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png", //3 Images
"col": 1,
"row": 1,
"size_y": 2,
"size_x": 2
}, {
"html":"https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png,https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png", // 2 Images
"col": 4,
"row": 1,
"size_y": 2,
"size_x": 2
},
{
"html": "https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png", // 1 Image
"col": 6,
"row": 1,
"size_y": 2,
"size_x": 2
},
{
"html": "https://image.flaticon.com/icons/svg/67/67994.svg,https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png", // 2 Images
"col": 1,
"row": 3,
"size_y": 1,
"size_x": 1
}, {
"html": "https://image.flaticon.com/icons/svg/67/67994.svg", //1 Image
"col": 4,
"row": 3,
"size_y": 1,
"size_x": 1
},
{
"html": "https://image.flaticon.com/icons/svg/67/67994.svg,https://d30y9cdsu7xlg0.cloudfront.net/png/802768-200.png", //2 Images
"col": 6,
"row": 3,
"size_y": 1,
"size_x": 1
}
];
for(var index=0;index<json.length;index++) {
var images = json[index].html.split(',');
var imageOutput = "";
for(var j = 0; j < images.length; j++) {
imageOutput += '<div class="imagewrap"><img src='+ images[j] +'> <input type="button" class="removediv" value="X" /></div></div>';
}
gridster.add_widget('<li class="new" ><button class="addmorebrands" style="float: left;">+</button><button class="delete-widget-button" style="float: right;">-</button>' + imageOutput + '<textarea>'+json[index].html+'</textarea></li>',json[index].size_x,json[index].size_y,json[index].col,json[index].row);
}
$('.removediv').on('click', function () {
$(this).closest('div.imagewrap').remove();
});
$(document).on("click", ".delete-widget-button", function() {
var gridster = $(".gridster ul").gridster().data('gridster');
gridster.remove_widget($(this).parent());
});
$('.js-seralize').on('click', function () {
var s = gridster.serialize();
$('.gridster ul li').each((idx, el)=>{ // grab the grid elements
s[idx].html = $('textarea', el).html(); // add the html key/values
json_variable=JSON.stringify(s)
});
$('#log').val(json_variable);
});
$(document).on("click", ".addmorebrands", function() {
$('#exampleModalCenter').modal('show');
});
有人請幫助我,因為我發現很難得到它
添加圖像部分現在已啟動並運行,至少在其原始版本中已修改並添加了本節中的一些代碼:
//EDITS
var parentLI;
$(document).on("click", ".addmorebrands", function() {
parentLI = $(this).closest('li');
$('#exampleModalCenter').modal('show');
$('#exampleModalCenter img').click(function(){
$(this).addClass('preselect');
$(this).siblings().removeClass('preselect');
selectedImageSRC = $(this).attr('src');
});
});
$('#add-image').click(function(){
parentLI.append('<div class="imagewrap"><img src="'+selectedImageSRC+'">
<input type="button" class="removediv" value="X" /></div>');
parentLI.children('textarea')
.append(', '+selectedImageSRC);
$('#exampleModalCenter').modal('hide');
});
這也是:
.preselect{
border: 2px solid white;
background: green
}
.preselect:hover{
border: 1px solid white;
background: lightgreen
}
我會告訴你每個單元格內部圖像的大小調整,以及其他所有內容:) https://jsfiddle.net/0ndht0zh/23/
UPDATE
此代碼僅適用於.removediv
存在的.removediv
:
$('.removediv').on('click', function () {
$(this).closest('div.imagewrap').remove();
});
這就是為什么預先存在的圖像會被刪除但不是之后添加的圖像。 我不是專家所以請研究更多技術解釋,但基本上:
下面的代碼幾乎完全相同,除非它附加到document
(但應用於 .removediv
),這個代碼運行時實際存在,事件總是會找到.removediv
。
$(document).on('click', '.removediv', function () {
$(this).closest('div.imagewrap').remove();
});
更新小提琴: https : //jsfiddle.net/0ndht0zh/27/
還記得在刪除時更新textarea
內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.