一对多关系的数据插入、修改,删除待完善



<!DOCTYPE html>
<html>
<head>
    <title>Customizing actions</title>


    <link href="content/shared/styles/examples-offline.css" rel="stylesheet">
    <link href="styles/kendo.common.min.css" rel="stylesheet">
    <link href="styles/kendo.default.min.css" rel="stylesheet">


    <script src="js/jquery.min.js"></script>
    <script src="js/kendo.web.min.js"></script>
    <script src="content/shared/js/console.js"></script>
    <script>
        
    </script>
    
    
</head>
<body>
    
        <div id="example" class="k-content">
            <div id="window" style="display:none">
<div >
<!--
<div id="gridTitle"></div>
<div id="gridContent"></div>
-->

<button id="addTitle" οnclick="addTitle()">addTitle</button>
<button id="addContent" οnclick="addContent()">addContent</button>
<button id="doDelete" οnclick="doDelete()">doDelete</button><br/>

<div style="float:left; width:150px; height:100px; background:#333" id="Title">
</div>

<div style="float:left; width:150px; height:100px; background:#333" id="Content">

</div>

<input type="hidden" id="title_id">
<input type="hidden" id="content_count">
<input type="text" id="deletData">
</div>


               
            </div>


            <span id="undo" style="display:true" class="k-button">Click here to open the window.</span>








            <script>
//设置弹出框
function addTitle(){
addDatas();
//alert($("#aTitle").html());
var id = $("#title_id").val();
if(id ==""){
id = 1;
}else{
id++;
}

$("#Title").append("<input οnclick='showData(this),deleteReady(this)' class='titles' id='title_"+id+"' value='title_"+id+"'/>");

$("#title_id").val(id);
var count = 0;
$("#content_count").val(count);
addContent();

}
function addContent(){
//alert("addContent");
var id = $("#title_id").val();
var count = $("#content_count").val();
if(count==""){
count = 1;
}else{
count++;
}
if(id!=""){


$("#Content").append("<input οnclick='deleteReady(this)' class='contents' id='title_"+id+"#"+count+"' value='title_"+id+"#"+count+"'/>");


$("#content_count").val(count);
}

}


//存放MetaData数据的二维数组,存放的数据格式如下
//metaDatas[data[title,contents[]]]


var MetaDatas = new Array();
function addDatas(){
//alert(obj.id);


//存放详细数据的二维数组,
//dataDetail[0]存放title,
//dataDetail[1]存放一个一维数组contents,
//contents中存放的是该title对应的所有content


var orgId = $("#Content input:text").attr("id");
var flag = true;

if(orgId!=""&& typeof(orgId) != "undefined"){//判断orgId既不为空也不为undefined

var ids = orgId.split("#");
//取得title的id
var id = ids[0];

for(var i=0 ;i<MetaDatas.length; i++){
var dataDetail = MetaDatas[i];
var title = dataDetail[0];

if(id == title){
//alert("旧数据");
flag = false;
//判断metaDatas数组中是否有该title对应的项,有则进入,然后将其中的
//dataDetail[]中的数据进行更新。
//var contents = dataDetail[1];


/** for(var x=0;x<dataDetail[1].length;x++){
var count = x+1;
var content_id=id+"#"+count;
var data = $("#Content input:text[id="+content_id+"]").val();
//alert("old:"+dataDetail[1][x]+" new:"+data);
contents[x] = data;
//alert("交换数据后:"+dataDetail[1][x]);
}
*/
var contents = new Array();
//var x=0;
var count = 1;
var content_id
var data ;
while(true){


content_id = id+"#"+count;
data = $("#Content input:text[id="+content_id+"]").val();
//alert(content_id+"    "+ data);
//alert("old:"+dataDetail[1][x]+" new:"+data);
if(data == ""||typeof(data) == "undefined"){
break;
}else{
contents[count-1] = data;
count++;
}

//alert("交换数据后:"+dataDetail[1][x]);
}
dataDetail[1] = contents;
MetaDatas[i] = dataDetail;
//MetaDatas.splice(i,1,dataDetail);
}
}
//如果是新的数据,则再往metaDatas中新增
if(flag){
//alert("新数据");
var dataDetail = new Array();
var contents = new Array();
dataDetail[0] = id;
var count = $("#content_count").val();
//alert(count);
for(var i=1;i<=count;i++){
var content_id=id+"#"+i;
var data = $("#Content input:text[id="+content_id+"]").val();
contents[i-1] = data;
}
dataDetail[1] = contents;
MetaDatas.push(dataDetail);
}
$("#Content").empty();
}


}

function showData(obj){
addDatas();
var id = obj.id;
if(typeof(id) == "undefined"){
id = obj;
}
var con;
//alert(MetaDatas.length);
for(var i=0 ;i<MetaDatas.length; i++){

var dataDetail = MetaDatas[i];
var title = dataDetail[0];

if(id == title){
con = dataDetail[1].length;
for(var x=0;x<dataDetail[1].length;x++){
   var count = x+1;

var content = dataDetail[1][x];
$("#Content").append("<input οnclick='deleteReady(this)' class='contents' id='"+id+"#"+count+"' value='"+content+"'/><br/>");
}
}
}
var idnum = id.split("_");
$("#title_id").val(idnum[1]);
$("#content_count").val(con);
}
function deleteReady(obj){
$("#deletData").val(obj.id);
}




function doDelete(){
//MetaDatas = new Array();
//alert(MetaDatas.length);
var id = $("#deletData").val();
var index = id.indexOf("#");
//用来获得该title对应的对象id
var titleId;
//index ==-1,说明删除的是该title对应的全部content
if(index ==-1){


titleId = id;


for(var i=0 ;i<MetaDatas.length; i++){

var dataDetail = MetaDatas[i];

var title = dataDetail[0];

if(id == title){

MetaDatas.splice(i,1);
//alert("MetaDatas:  "+MetaDatas[i]+" length:"+MetaDatas.length);
break;
}
}
}
//index !=-1,说明是删除选中的某一个content
else {
var datas = id.split("#");
titleId = datas[0];
for(var i=0 ;i<MetaDatas.length; i++){

var dataDetail = MetaDatas[i];
var title = dataDetail[0];

if(datas[0] == title){
var contents = dataDetail[1];
contents.splice(datas[1],1);
//alert("contents: "+contents+" length:"+MetaDatas.length);
break;
}
}
}
$("#deletData").val("");
$("#Content").empty();
showData(titleId);
}















function onOpen(e) {
                    kendoConsole.log("event :: open");
                }


                function onClose(e) {
                    $("#undo").show();
                    kendoConsole.log("event :: close");
                }


                function onActivate(e) {
                    kendoConsole.log("event :: activate");
                }


                function onDeactivate(e) {
                    kendoConsole.log("event :: deactivate");
                }


                function onRefresh(e) {
                    kendoConsole.log("event :: refresh");
                }


                function onResize(e) {
                    kendoConsole.log("event :: resize");
                }


                function onDragStart(e) {
                    kendoConsole.log("event :: dragstart");
                }


                function onDragEnd(e) {
                    kendoConsole.log("event :: dragend");
                }
function openDialog(){
if (!$("#window").data("kendoWindow")) {
                        $("#window").kendoWindow({
                            width: "630px",
                            height: "315px",
                            title: "增加元数据",
                            actions: ["Refresh", "Close"],
                            content: "../../content/web/window/ajax/ajaxContent1.html",
                            visible: false,
                            open: onOpen,
                            activate: onActivate,
                            close: onClose,
                            deactivate: onDeactivate,


                            refresh: onRefresh,


                            resize: onResize,
                            dragstart: onDragStart,
                            dragend: onDragEnd
                        }).data("kendoWindow").open();
                    }
}
                $("#undo")
                    .bind("click", function() {
openDialog();
                        $("#window").data("kendoWindow").open().center();;
                       // $("#undo").open();
                    });
//给弹出框中增加列
              
            </script>




             <style scoped>
                #example {
                    min-height:400px;
                }


                #undo {
                    text-align: center;
                    position: absolute;
                    white-space: nowrap;
                    border-width: 1px;
                    border-style: solid;
                    padding: 2em;
                    cursor: pointer;
                }




            </style>
        </div>
        <br/>
        <div class="console"></div>
</body>
</html>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来一一回答你的问题。 1. 顺序容器包括 vector、deque 和 list 三种。它们的基础数据结构分别是动态数组、双端队列和双向链表。其中,vector 在尾部插入删除元素的时间复杂度为 O(1),在其他位置插入删除的时间复杂度为 O(N);deque 在两端插入删除元素的时间复杂度均为 O(1);list 在任意位置插入删除元素的时间复杂度均为 O(1)。另外,vector 和 deque 支持随机访问,而 list 不支持。 2. 容器的共性包括:存储数据、提供访问数据的接口、实现数据插入删除、管理数据的内存分配和释放。 3. 容器适配器与标准容器之间的关系是,容器适配器是在标准容器的基础上提供了一些额外的功能,如 stack 和 queue 分别基于 deque 和 list 实现,提供了后进先出和先进先出的操作。 4. 关联容器包括 set、multiset、map 和 multimap 四种。其中,set 和 multiset 存储的是有序不重复的元素,map 和 multimap 存储的是有序键值对,键是唯一的。set 和 map 的底层实现是红黑树,multiset 和 multimap 的底层实现也是红黑树,但允许有重复的元素或键。 5. 表5.6对本章所介绍的容器进行了比较,包括底层数据结构、主要成员函数、是否支持[]与at()、数据插入方法、数据删除方法、成员是否有序、迭代器类型等方面。 6. 在运行效率方面,vector 的 erase 操作的时间复杂度为 O(N),因为要将后面的元素向前移动,而 list 的 erase 操作的时间复杂度为 O(1),因为只需要修改指针。在返回值方面,vector 的 erase 函数返回的是指向删除元素后一个元素的迭代器,而 list 的 erase 函数返回的是指向下一个元素的迭代器。下面是一个简单的程序,展示了 vector 和 list 的 erase 函数的差异: ```c++ #include <iostream> #include <vector> #include <list> int main() { std::vector<int> vec{1, 2, 3, 4, 5}; auto itv = vec.erase(vec.begin() + 2); // 删除元素3 for (auto i : vec) std::cout << i << " "; // 输出:1 2 4 5 std::cout << "\n"; std::cout << *itv << "\n"; // 输出:4 std::list<int> lst{1, 2, 3, 4, 5}; auto itl = lst.erase(++lst.begin()); // 删除元素2 for (auto i : lst) std::cout << i << " "; // 输出:1 3 4 5 std::cout << "\n"; std::cout << *itl << "\n"; // 输出:3 return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值