精华内容
下载资源
问答
  • I have a class A with an id of type String and a list of children which is of the same type as parent (Class A) but Children could be null or the children list could be empty. Given an id, need to fin...

    I have a class A with an id of type String and a list of children which is of the same type as parent (Class A) but Children could be null or the children list could be empty. Given an id, need to find the object from a list that could match with the parent object id or the Child object id using java 8 streams.

    I have the below code, that is returning the parent object even though the id matches the child object. I needed the child object.

    Optional a = mylist.stream()

    .filter(f -> f.getId().equalsIgnoreCase(id) ||

    f.getChildren().anyMatch(f2 -> f2.getId().equalsIgnoreCase(id)))

    .findFirst();

    解决方案

    what you are ending up performing within the filter, would return the parent either when the parent matches the criteria or even if one of its children matches the criteria because of the || condition accompanied with anyMatch amongst children.

    if you were to return the corresponding A instance only, you would have to flatMap all the A objects and then perform the filter to find the first match.

    Optional firstMatch = aList.stream()

    .flatMap(a -> Stream.concat(Stream.of(a), // parent

    a.getChildren().stream().filter(Objects::nonNull))) // its non-null children

    .filter(f -> f.getId().equalsIgnoreCase(id))

    .findFirst(); // finds the corresponding instance of A and not its parent

    展开全文
  • 以上两种组件中,都是将背景完全填充到父级容器,区别在于模态框通常是背景填满屏幕,通常使用 position: fixed; 用于定位,而加载器更多用于将其背景布满父级容器,通常使用 position: absolute; 定位。 通过 CSS ...

    引入

    在前端界面设计中,会有那么一些布局,需要占满整个父级容器,比如:

    • 模态框(Modal)的背景

      模态框

    • 加载器(Spinner)的背景

      Loading

    以上两种组件中,都是将背景完全填充到父级容器,区别在于模态框通常是背景填满屏幕,通常使用 position: fixed; 用于定位,而加载器更多用于将其背景布满父级容器,通常使用 position: absolute; 定位。

    通过 CSS position 属性实现填满父级容器

    为了实现填充父级的需求,从正常的盒子模型的设计逻辑来讲,我们的思路大体上很简单:将子容器的高度、宽度设置为和父级一致

    围绕这个核心思路,我们可以尝试设置 CSS 属性: width: 100%; height: 100%;, 但在 CSS 中,% 这个单位仅用于用于参考父级已设置的宽度或高度,换句话说,如果父级容器并没有设置宽度或高度,子容器设置的 100% 并不能产生相应的作用,而在实际的 UI 布局中,固定父级容器高度的情况是很少出现的,大部分都是由内容将父级容器给撑高,而这种情况下子级容器并不能通过设置 height: 100%; 来将高度设置为和父级一致。

    如果使用 position: fixed 定位,width: 100%; height: 100%; 是可以设置高度和宽度布满屏幕的,不过需要通过 left:0;top:0; 调整位置刚好和屏幕大小一致。

    既然大部分情况下我们不能使用 height: 100% 来将子容器的高度设置为和父级一致,那我们应该怎样来填充父级空间呢?

    答案是通过 left, top, right, bottom 这四个属性。

    关于这四个属性,我们都知道是配合 position 使用的,并且会随着 position 设置的值不同,有着不同的特性:

    • position: static:无效
    • position: fixed:参考整个屏幕进行定位
    • position: relative:参考自己进行定位
    • position: absolute: 参考设置了 positionstatic 的最近一个父级进行定位

    通常我们都通过使用其中两个非对立的属性来进行定位,比如 left:0; top: 0;position: fixed 中表示该容器对齐屏幕的左上角。我们可以通过类似的写法对齐右上角,右下角,或者是左下角。

    那如果我们设置一组对立的定位呢,比如在 position: fixed 的情况下设置 left: 0; right: 0;,在对该容器设置了指定 widthheight 的情况下,我们会发现,该容器对齐在屏幕的左侧,right: 0 似乎并没有任何作用,在设置上下对立的定位 top: 0; bottom: 0; 时,该容器会对齐在屏幕的上方,仿佛 bottom 也没有生效。

    细心的同学肯定注意到了,这里有个前提条件:对该容器设置了指定 widthheight,如果我们去掉容器的高度和宽度并设置 left: 0; right: 0; top: 0; bottom: 0;,那么神奇的事情发生了,该容器铺满了整个容器!那如果使用 position: absolute 呢,效果是显而易见的,铺满了整个父级元素(前提是父级元素设置了 position: relativeposition: fixedposition: absolute)。

    总结一下,如果要铺满父级容器,我们可以将父级容器设置为 position: relative,并且为子级容器设置以下 CSS 属性

    .sub{
        position: absolute;
        width: auto; height: auto;
        top: 0; right: 0; bottom: 0; left: 0;
    }
    

    关于 position 中设置对立属性的思考

    既然我们可以通过设置对立属性为 0,让没有指定高度或宽度子级容器铺满父级容器,那么我们是不是也可以通过设置对立属性为其它值从而拉扯子级容器的高度或宽度呢?

    答案是肯定的,只要子级容器没有指定高度或宽度,我们都可以设置对立属性为任意值从而拉扯其容器高度或宽度

    例子:

    1. 设置子容器高度为父级容器高度减去 100px ,宽度和父级一致并且垂直居中显示
       .sub{
           position: absolute;
           width: auto; height: auto;
           top: 50px; right: 0; bottom: 50px; left: 0;
       }
      
    2. 设置子容器宽度比父容器宽 120px,左侧超出 20px 右侧超出 100px,高度与父容器一致
       .sub{
           position: absolute;
           width: auto; height: auto;
           top: 0; right: -100px; bottom: 0; left: -20px;
       }
      

    原文转自 [CSS] Position 用法进阶01:匹配父级容器空间 | 苍石居 未经允许禁止转载

    展开全文
  • <p>I have a WordPress site where by global page template (from Elementor) pulls in the correct title for the page. <p>However, for my individual WooCommerce products (pages), I'd simply like the ...
  • $result = []; foreach ($data as $item) { $obj = (object)[]; $obj->id = $item['id']; $obj->parent_id = $item['parent_id']; $obj->type = $item['type']; $obj->level = $it...
    $result = [];
    foreach ($data as $item) {
        $obj = (object)[];
        $obj->id = $item['id'];
        $obj->parent_id = $item['parent_id'];
        $obj->type = $item['type'];
        $obj->level = $item['level'];
        $obj->name = $item['name'];
        $obj->url = $item['url'];
        $obj->child = [];
        $result[$obj->id] = $obj;
    
    }
    ksort($result);
    foreach ($result as $item) {
        if ($result[$item->parent_id] ?? false) {
            $result[$item->parent_id]->child[] = $item;
        }
    }
    $top_id = '0';
    $dataset = [];
    foreach ($result as $item) {
        if ($item->parent_id == $top_id) {
            $dataset[] = $item;
        }
    }
    return $dataset;

     

    展开全文
  • //设备树渲染方法,treeData由接口获得并传入方法中 renderDeptTree ( treeData ) { var el = 'deparment-ztree' var treeObj ; try { $ . fn . zTree . getZTreeObj ( el ) . destroy ( ) ; ...

    在这里插入图片描述
    具体效果见上图。


    具体代码

    以下代码是基于Vue编写的。

    Html部分

    <div class="search-box clearfix">
        <a-input placeholder="请输入搜索关键词..." v-model="key" @keyup.enter="searchDev" />
        <a-button @click="searchDev">搜索</a-button>
    </div>
    <div class="device-list">
        <div class="ztree radio-ztree" id="deparment-ztree"></div>
    </div>
    

    Js部分

    // tree基础配置
    var treeOpts = {
        view: {
            showLine: false,
            dblClickExpand: false,
            showIcon: function showIcon(treeId, treeNode){
                return !treeNode.isParent;
            }
        },
        check: {
            enable: false,
        },
        callback: {}
    };
    
    //设备树渲染方法,treeData由接口获得并传入到方法中
    renderDeptTree(treeData){
    	var el = 'deparment-ztree'
        var treeObj;
    
        try{
            $.fn.zTree.getZTreeObj(el).destroy();
        } catch(error){}
    
        // 添加自定义Dom
        function addDiyDom(treeId, treeNode){
            if(treeNode.type == 'DEPT'){ // 添加统计数值
                var aObj = $("#" + treeNode.tId + "_a");
                var count = treeNode.total;
                var str = '<div class="count-box">(<span class="count">' + count[0] + '</span>/<span class="online">' + count[1] + '</span>/<span class="downline">' + count[2] + '</span>)</div>';
                aObj.append(str);
            } else if(treeNode.type == 'DEV'){ // 添加收藏按钮
                var aObj = $("#" + treeNode.tId + "_a");
                var str = '';
                if(treeNode.gzzt == '0'){
                    str = $('<span class="setfavorite addfavorite"><i class="icon material-icons">' + heart + '</i></span>');
                } else if(treeNode.gzzt == '1'){
                    str = $('<span class="setfavorite removefavorite"><i class="icon material-icons">' + solidHeart + '</i></span>');
                }
                aObj.append(str);
            }
        }
    
        // 基本配置
        treeOpts.view.addDiyDom = addDiyDom;
    
        // 点击事件
        treeOpts.callback.beforeClick = function(treeId, treeNode, clickFlag){
            if(treeNode.type == 'DEPT'){
                if(treeNode.open){ // 点击父级展开或者收起子级
                    $.fn.zTree.getZTreeObj(el).expandNode(treeNode, false, false, false);
                } else{
                    $.fn.zTree.getZTreeObj(el).expandNode(treeNode, true, false, true);
                }
                return false;
            } else{
                return true;
            }
        }
        treeOpts.callback.onClick = function(event, treeId, treeNode){
            // 点击父级展开子级
            treeObj.expandNode(treeNode);
            if(treeNode.type == 'DEV'){
                // 设置设备编号
                self.sbbh = treeNode.id;
    
                // 子页面方法调用
                document.getElementById("liveview").contentWindow.window.page.init(treeNode.id);
                }
            } else{
                return false;
            }
        }
        
        $.fn.zTree.init($("#" + el), treeOpts, treeData);
        treeObj = $.fn.zTree.getZTreeObj(el);
    },
    // 搜索设备
    searchDev(){
        var self = this;
        var el = 'deparment-ztree';
        var key = self.key;
        var nodeList;
        zTreeObj = $.fn.zTree.getZTreeObj(el);
        var allNode = zTreeObj.transformToArray(zTreeObj.getNodes());
        
        // 查找节点
        function filterFunc(node) {
            if(node.name.indexOf(key) != -1){
                return true;
            } else{
                return false;
            }
        };
    
        // 查找父级
        function findParent(zTreeObj, node) {
            zTreeObj.expandNode(node, true, false, false);
            var pNode = node.getParentNode();
            if (pNode != null) {
                nodeList.push(pNode);
                findParent(zTreeObj, pNode);
            }
        };
    
        // 隐藏所有节点
        zTreeObj.hideNodes(allNode);
    
        // 根据关键词搜索
        if(key){
            nodeList = zTreeObj.getNodesByFilter(filterFunc);
            nodeList = zTreeObj.transformToArray(nodeList);
            for (var n in nodeList) {
                if (nodeList.hasOwnProperty(n)){
                    findParent(zTreeObj, nodeList[n]);
                }
            }
            zTreeObj.showNodes(nodeList);
        } else{ // 搜索关键词为空时展示所有节点且收起所有节点
            zTreeObj.showNodes(allNode);
            zTreeObj.expandAll(false);
        }
    },
    
    展开全文
  • <p>I've always programmed Android with Eclipse and decided to start migrating to <a href="https://en.wikipedia.org/wiki/Android_Studio" rel="noreferrer">Android Studio</a>. I decided to use the ...
  • const reg = /<p\b[^<>]*><img\b[^<>... // 这边是默认匹配0下标进行html文本替换 // const matchStr = content.match(reg) // const strReg = /<img\b[^<>]*\/...
  • 根据后代子key,匹配到对应最父级key; 处理后的后辈集合: getParentKey() { let parentKey = ""; let folderId = form.folderId;//当前子id let formFolders = formFolders;//树数据 let list = []; let ...
  • $(this).parent() //取当前元素的父级 $(this).parent().next() //取父元素的同级元素 $("selector").children() 获取匹配元素的子元素集合,以数组返回(只考虑子元素,不考虑子元素以下的后代...
  • 然后前端需要将两者进行匹配,然后追加el-tree树形中。其中子级全选时,父级也会选中,但是由于el-tree的设计原理,当子级未全选中时,父级是不会选中的(此时为半选),因此,此时在传给后端的list中是没有父级的,...
  • C4D 变形器笔记

    2020-07-05 17:01:13
    注意勾选匹配到父级 1扭曲 模式 (1)限制框内会受影响 (2)框内框外一点都不熟影响 (3)无限都受影响 保持纵轴长度--物体长度不变 衰减 影响的衰减范围内的物体 设置平层级,也可对物体产生影响 ...
  • prev() 获得匹配元素集合中每个元素紧邻的前一个同辈元素,由选择器筛选(可选)。 prevAll() 获得匹配元素集合中每个元素之前的所有同辈元素,由选择器进行筛选(可选)。 prevUntil() 获得每个元素之前所有的...
  • 使用javascript获取父级元素

    千次阅读 2017-09-22 18:01:59
    使用javascript获取父级元素之前基本都用jquery去写代码,用多了习惯了它那简洁的写法,后来使用ES6进行编写的时候,需要使用类似 $(this).parent();来获取点击元素所属的父级元素时发现,es6中的class下的this指向...
  • js 递归树结构数据查找所有父级

    万次阅读 2019-02-16 16:42:45
    需求:通过传入当前节点的ID,查询出所有的父级节点 // value - id || city - parent_id export function getParent(data2, nodeId2) { var arrRes = []; if (data2.length == 0) { if (!!nodeId2) { arrRes.....
  • 获取父级元素 获取其父级元素 $("#id").parent() 获取其所有的祖先元素 $("#id").parents() 获取其最近的祖先元素,依次上溯 $("#id").closest() 获取同级元素 获得匹配元素紧邻的下一个同胞元素。如果...
  • JS-对象查找父级

    2016-05-13 09:54:00
    之前在寻找两个以上的父级,一直傻傻的用parent().parent()... 今天,需要写五个,当然以前也是写过五个的,但是今天总想着换个简单的方式,至少不要.parent().parent().parent().parent().parent()这样 于是和...
  •  从元素本身开始,逐级向上级元素匹配,并返回最先匹配的元素。 其中 find() :  搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。 转载于:...
  • 一、获取父级元素 1、 parent([expr]): 获得当前匹配元素集合中每个元素的父元素,使用选择器进行筛选是可选的。
  • 1.获取父级元素 $("#id").parent() 获取其父级元素 $("#id").parents() 获取其所有的祖先元素 $("#id").closest() 获取其最近的祖先元素,依次上溯 ——————————————————————————– 2.获取...
  • 根据子ID获取顶级父级id

    千次阅读 2019-03-09 17:08:27
    根据子ID获取顶级父级id @param [type] $id @return void */ function getparentid($id) { $sql = Db::name(‘category’)-&gt;field(‘id,pid’)-&gt;select(); arr=[];foreach(arr = []; foreach (arr=...
  • 1.获取父级元素 $("#id").parent() //获取其父级元素 $("#id").parents() //获取其所有的祖先元素 $("#id").closest()//获取其最近的祖先元素,依次上溯 2.获取同级元素 $("#id").next(selector) //获得...
  • 选中的元素 数据结构大概: data: [ {id:123321321, name: '哇...2、如果没有在第一层找到选中的id,开始递归该对象,直到找到匹配选中id的对象,而后执行第一步,找到最底层的子类 实现代码: /* * 第一步.
  • jq 父级iframe 相关操作

    千次阅读 2015-08-21 17:12:17
    我们的目的是通过 id 为 item1 的便签a取 class 为 parent1 的ul元素,有以下几种方法: 1、parent([expr]) 取得一个包含着所有匹配元素的唯一父元素的元素集合。 你可以使用可选的表达式来筛选。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,592
精华内容 8,636
关键字:

匹配到父级