MFC 树控件

MFC 树控件,第1张

你的这个函数的算法思路是:对指定节点开始,寻找其兄弟节点和所有字节是否被选中。

第一步:判断当前节点hItem是否被选中

第二步:循环获取hItem的兄弟节点,也就是你的这个循环

HTREEITEM hSibling = m_OrgInfoGetNextItem(hItem, TVGN_NEXT);

while (hSibling)

{

hSibling = m_OrgInfoGetNextItem(hSibling, TVGN_NEXT);

}

m_OrgInfoGetNextItem(hSibling, TVGN_NEXT)是查找hSibling的下一个兄弟节点

如此循环,直到hSibing的下一个节点不是兄弟节点,那么hSibing就返回NULL,即0

跳出while循环。

第三步:查找当前节点的所有子节点。

首先给 span 设定一个 id(或者 class,这是为了方便 jQuery 获取),例如 span#span。

其次,兄弟节点是单个还是多个,这里例子给出的是 span 的下一个。

$(function(){

    $("#span")click(function(){

        var $this = $(this);

        // 获取 span 的下一个节点 B

        // 如果需要获取 span 兄弟节点是上一个的话,可以使用 prev

        // 如果是多个的话,需要使用 siblings,详细参考 jQuery api 手册

        var B = $thisnext(); 

        

        if( $thishasClass("A") ){ // 判断是否有 A class

            $thisremoveClass("A")addClass("C");

            Bhide();

        }else{

            $thisremoveClass("C")addClass("A");

            Bshow();

        }

    });

});

仅供参考

PS 下次提问记得设定分类,否则可能没人回答哦~

<style>

    red{

        background-color: red;

    }

</style>

<div id="demo">

<a href="javascript:void(0)">萝卜</a>

<a href="javascript:void(0)">青椒</a>

<a href="javascript:void(0)">白菜</a>

<a href="javascript:void(0)">土豆</a>

</div>$(function(){

    //绑定单击事件

    //将事件绑定在DIV上,是利用事件的冒泡原理, 这样使用,

    //使代码结构看起来更整洁,更容易搜索到单击事件发生的位置

    //推荐在开发插件,或者其它比较复杂的功能时候,将事件绑定到父级容器

    //这样即使此例中的A标签是后来通过 JAVASCRIPT脚本添加进来的,

    //同样能够正确地处理

    $('#demo')click(function(event){

        var $target = $(eventtarget);

        //判断如果点击的A标签,则执行以下代码

        if(/^a$/itest(eventtargettagName)){

            $targetaddClass('red')

                siblings('a')removeClass('red');

            alert('你点击了我:'+$targettext());

        }

    });

});

分布式锁的三种实现方式分别是:基于数据库实现分布式锁、基于缓存(Redis等)实现分布式锁、基于Zookeeper实现分布式锁。

一、基于数据库实现分布式锁

1、悲观锁

利用select … where … for update 排他锁。

注意:其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。

2、乐观锁

所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源, *** 作过程中认为不存在并发冲突,只有update version失败后才能觉察到,抢购和秒杀就是用了这种实现以防止超卖,通过增加递增的版本号字段实现乐观锁。

二、基于缓存(Redis等)实现分布式锁

1、使用命令介绍:

(1)SETNX

SETNX key val:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。

(2)expire

expire key timeout:为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。

(3)delete

delete key:删除key

在使用Redis实现分布式锁的时候,主要就会使用到这三个命令。

2、实现思想:

(1)获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。

(2)获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。

(3)释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。

三、基于Zookeeper实现分布式锁

ZooKeeper是一个为分布式应用提供一致性服务的开源组件,它内部是一个分层的文件系统目录树结构,规定同一个目录下只能有一个唯一文件名。

基于ZooKeeper实现分布式锁的步骤如下:

(1)创建一个目录mylock。

(2)线程A想获取锁就在mylock目录下创建临时顺序节点。

(3)获取mylock目录下所有的子节点,然后获取比自己小的兄弟节点,如果不存在,则说明当前线程顺序号最小,获得锁。

(4)线程B获取所有节点,判断自己不是最小节点,设置监听比自己次小的节点。

(5)线程A处理完,删除自己的节点,线程B监听到变更事件,判断自己是不是最小的节点,如果是则获得锁。

扩展资料;

一、数据库分布式锁实现的缺点:

1、db *** 作性能较差,并且有锁表的风险。

2、非阻塞 *** 作失败后,需要轮询,占用cpu资源。

3、长时间不commit或者长时间轮询,可能会占用较多连接资源。

二、Redis(缓存)分布式锁实现的缺点:

1、锁删除失败,过期时间不好控制。

2、非阻塞, *** 作失败后,需要轮询,占用cpu资源。

三、ZK分布式锁实现的缺点:

性能不如redis实现,主要原因是写 *** 作(获取锁释放锁)都需要在Leader上执行,然后同步到follower。

1、首先获取要添加的节点的节点,然后创建一个节点,添加到节点的前面。

2、<!DOCTYPE html><html> <head>  <meta charset="utf-8">  <title>DOM树 *** 作</title>  <script>   function f1(){。

3、找到狮子狗这个节点     通过id查找到狮子狗节点    var ul=documentgetElementById("d1")。

4、</head> <body>  <!--在ul列表中追加一个蛮王英雄-->  <ul id="d1">   <li>亚索</li>   <li>狮子狗</li>   <li>披甲龙龟</li>。

5、  </ul>  <input type="button" value="追加蛮王" onclick="f2()" /> </body></html>。

6、在狮子狗节点后追加一个<li>蛮王</li>   a找到狮子狗这个节点     通过id查找到狮子狗节点     var li=documentgetElementById("l1");   b创建<li>蛮王</li>节点对象和内容。

以上就是关于MFC 树控件全部的内容,包括:MFC 树控件、点击span显示span的兄弟节点B,同时设span的class为A,再点span隐藏B,同时设s、关于jquery *** 作兄弟节点CSS的简单问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9315681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存