问题描述
我尝试使用此问题here来序列化属性,但不能在不同的情况下使用,如何在.main div父对象中查找整个属性
$(".send").click(function() {
var data_array = new Array();
$(".main").each(function() {
var item = {};
for (var i in $(this).attr('id')) {
item[i] = $(this).attr(i);
}
data_array.push(item);
});
var serialized = JSON.stringify(data_array);
$("#result").text(serialized);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="main">
<ul>
<li class="dropped" data-order="0" data-id="1" data-content="blabla" id="first">first</li>
<li class="dropped" data-order="0" data-id="2" data-content="another content" id="second">second</li>
</ul>
<labe for="input1">Name: </labe>
<input type="text" id="input1" />
</div>
<div id="result"></div>
<button class="send">Send</button>
我正在尝试获取<div class="main">
内的所有ID,包括输入,标签以及标签<li>
解决方法
您需要使用Descendant Selector来获取data-attributes
类的所有.main
。在您的情况下,仅在.main
上使用$.each
即可。
编辑:根据对话,您要在.main html类中找到ID,然后用一些新ID替换现有ID。现在,您可以单击“发送”,所有操作都可以使用,旧ID将存储在数组中,新ID将应用到HTML元素。
演示:
$(".send").click(function() {
var data_array = []
$(".main").each(function(index,el) {
//store object
var item = {};
//find all the li in .main
$($(el).find('li')).each(function(ind,li) {
item["id" + ind] = $(li).attr('id') //store old li id
$(li).attr("id","new-li" + ind); //li change new id
})
//store input id
item['id'] = $(el).find('input').attr('id') //store old id
$(el).find('input').attr('id','new-input-id') //assign input new id
//Push old id's data to array
alert('All id`s replaced for li and input')
data_array.push(item);
});
console.log(data_array)
var serialized = JSON.stringify(data_array);
$("#result").text(serialized);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="main">
<ul>
<li class="dropped" data-order="0" data-id="1" data-content="blabla" id="first">first</li>
<li class="dropped" data-order="0" data-id="2" data-content="another content" id="second">second</li>
</ul>
<labe for="input1">Name: </labe>
<input type="text" id="input1" />
</div>
<div id="result"></div>
<button class="send">Send</button>