[js] 求助 js 代码,左键展开文档树,中键打开文档

思源假子文件夹插件 视频教程 - 链滴

一个小建议:能否在打开页面的同时,自动展开该页面的子页面 - 链滴

点击展开文档树 - 链滴

可以通过 JS 代码实现鼠标中键展开文档吗? - 链滴

基于以上帖子及下面的“中键展开文档树”的代码,哪位大佬能帮忙写一个 js 代码,实现以下功能:

如果当前文档下面含有子文档:

  1. 鼠标左键文档树条目,展开文档树(显示该文档下的子文档),不打开文档
  2. 鼠标中键文档树条目,不展开文档树,打开文档(原左键的默认功能)

先感谢 @zxkmm,@Undii,@wilsons 等大佬的相关插件、代码和热心帮助!

// 中键展开文档树:基于https://ld246.com/article/1682476267736 (function(){ let g_reset = setInterval(main, 2000); function main() { if (document.querySelector('.sy__file')) { clearInterval(g_reset); }else{ return false; } document.querySelector('.sy__file').addEventListener('mousedown', event => { if (event.button != 1) return; let notTitleFlag = false; if (!event.target.classList.contains('b3-list-item__text')) notTitleFlag = true; let target = event.target.parentNode; let temp = event.target; //console.log("0426",event); for (let i = 0; i < 4 && temp; i++) { if (temp?.getAttribute("data-type") == "navigation-file" || temp?.getAttribute("data-type") == "navigation-root") { target = temp; break; } temp = temp?.parentNode; } //console.log("0426target", target); if (target?.getAttribute("data-type") == "navigation-file" || target?.getAttribute("data-type") == "navigation-root") { const b3ListItemToggle = target.querySelector('.b3-list-item__toggle'); const title = target.querySelector('.b3-list-item__text'); if (b3ListItemToggle.classList.contains('fn__hidden')) return; event.preventDefault(); b3ListItemToggle.click(); if (event.ctrlKey) { title.click(); } } }, true); } })();
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25523 引用 • 105567 回帖 • 1 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    172 引用 • 1158 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9766 引用 • 44426 回帖 • 88 关注
4 操作
wilsons 在 2025-01-13 09:04:54 更新了该帖
wenbocn 在 2025-01-12 23:03:59 更新了该帖
wenbocn 在 2025-01-09 15:21:16 更新了该帖
wenbocn 在 2025-01-09 15:04:16 更新了该帖

相关帖子

被采纳的回答
优质回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 我等下写到插件里面吧

    1 回复
  • zxkmm 1 2 评论

    等等,不对,查有没有子文档我不太会查,还是不写了

    遇到问题, 解决问题, 放弃问题
    HugZephyr
    @EmberSky 笑鼠。不过现在写好了
    zxkmm
  • zxkmm 1 2 评论

    可以尝试一下找个 ai,把我的插件源码全都复制过去然后让它加功能就行,插件的功能性代码全都在 index.ts,我感觉 ai 会写 sql,我不会写所以没办法查子文档

    我感觉最理想的设计应该是:点之后如果这个文档是空的,就作展开操作,否则如果文档不是空的,就作打开文档操作。但还是因为我不会写 sql 所以没办法写这个功能

    1 回复
    大佬,判断是否有子文档不用写 SQL 也可以,1,data-count 属性判断(貌似最新版才行,3.1.14 后是可以,旧版不支持实时更新,需要刷新才行),2,.b3-list-item__arrow 是否有小箭头判断
    wilsons 2
    @wilsons 👍🏻👍🏻
    wenbocn
  • wenbocn via Android

    大佬,中键展开文档树的代码就能区分是否有子文档,您能否再看看或试一下这个 js🙏🏻

    1 回复
  • wenbocn via Android

    用文档图标是否是文件夹判断也行的

  • zxkmm 1 3 评论

    感谢您的提醒。

    这个实现挺聪明的,看 toggle 有没有加了隐藏的 css class,可能比查表还快

    if (b3ListItemToggle.classList.contains('fn__hidden')) return;
    但有一个关键问题是,这个判断其实是没有用的。因为你可以直接假设它有子文档。这种情况下它真有,那很好,展开。如果它没有,那也很好,它打开。所以这个判断是没有作用的
    zxkmm 1
    我刚刚翻到一个可能可以照抄的 sql: 查询当前笔记本下的所有文档,并列出该文档已被加入的数据库,如果没有加入,则为空 这个判断会有用我感觉
    zxkmm 1
    @zxkmm 😂 大佬我不懂,您看着弄 👍🏻👍🏻
    wenbocn 1
  • zxkmm 1 14 评论

    另外如果实现了不需要给我积分。因为积分对我没有用。可以给 @wilsons, ta 是订阅用户。积分对他有用

    1 回复
    大佬不用,一码归一码,你的功劳当然得给你。 @wenbocn 可以帮他 github star 他需要 star
    wilsons 1
    @wilsons 收到,感谢两位大佬的帮忙!👍🏻👍🏻
    wenbocn
    @wilsons 因为如果实现的话我会用您的 sql
    zxkmm 1
    @zxkmm 功劳有限,如果用 SQL 判断是否有子文档,用 select count(*) as count from blocks where path like '% 文档 id%' and type = 'd';这个应该就行了吧,cout > 1 有子文档
    wilsons
    @wilsons 刚才发现思源内核有 getChildBlocks 这个对我来说简单点
    zxkmm 1
    @zxkmm 不可以,这个判断的是块,比如标题是否有子块等,不能判断文档是否有子文档,如果传入文档 id 获取的是文档下的所有块。 await requestApi('/api/block/getDocInfo', {id: '20241113081003-xl24lyy'}) 这个 api 可以,返回结果有个 subFileCount 字段可以判断。
    wilsons
    @wilsons 我现阶段是发现 getChildBlocks 的每个 item, 然后遍历所有的 item,如果 item 没有 markdown 字段,说明是空的,如果有 markdown 字段,说明不是空的,从而说明文档不是空的。因为空文档总是有一个空块,不知道 sql 怎么处理 (然后不需要遍历所有 item,我写了一个阈值,如果是连续三个都是空的就是算是空的,因为虽然明面上思源不可能打出连续两个空块,但是有的用户可能有这种样子的东西,因为各种因素))
    zxkmm 1
    @wilsons 具体方案我刚才 push 了代码,可以康康 :)
    zxkmm 1
    @zxkmm 我觉得不太对,我前面 3 行都空,第 4 行有东西也可以呀,需要全部遍历,要么用箭头函数,比如,空文档:childBlocks.find(b => b.markdown)===undefined,!==undefined 是非空文档
    wilsons
    @wilsons 有的人用单个文档来存小说,遇到这种情况如果全都遍历会卡死的。所以我只能放弃前三个块都是空的情况。而且思源的编辑器本身也就不支持同时两个空块。只是可能会有一部分插件造成这种现象,所以这个本身就是 edge case
    zxkmm 1
    @zxkmm 没太懂你说的空块是指什么?一直回车不输入东西,不是可以连续多个空块吗?如果内容过多,可以用 SQL,SQL 有索引,没有性能瓶颈,select count(*) as count from blocks where root_id = '文档 id' and type != 'd' and markdown != ''; count>0 不为空
    wilsons
    @wilsons 谢谢,等我明早换成用 sql 看看
    zxkmm 1
    @zxkmm 等等,刚才看了下 blocks 竟然只有 id,parent_id,root_id 加了索引,这样的话貌似索引效果不大,等会提个 issue
    wilsons
    @wilsons 我是第一个给他的 github 点赞的 😁
    wenbocn
  • wenbocn via Android

    收到,感谢两位大佬的帮忙!👍🏻👍🏻

  • 我这边鼠标中键无法覆盖思源本身的“新窗口打开”行为。

  • wenbocn 5 评论

    感谢两位大佬,辛苦啦!!!@zxkmm @wilsons

    在思源笔记中,如果某个文档下面有子文档,会在这个文档的前面加上箭头(思源本身带有的功能)。是不是这个思源本身判断是否加箭头用的相关代码,是最适合用来判断是否有子文档的,是否用一下这些代码?

    是的,暂且不说是不是最好的,但是判断子文档没有用处。因为你可以直接假设它有子文档。这种情况下如果它真有,那很好,展开。如果它没有,那也很好,它打开。所以这个判断是没有作用的,因为不用判断时候它已经是达成了预期的目的了
    zxkmm 1
    @zxkmm 也就是不管有没有子文档,都会即打开,又展开吗?是不是这样在右侧打开的页签窗口就会显示一些空白文档了?
    wenbocn
    @zxkmm 与这个 js 功能相似?在打开页面的同时,自动展开该页面的子页面 一个小建议:能否在打开页面的同时,自动展开该页面的子页面
    wenbocn
    @zxkmm 非也,没判断前,无论有没有箭头,即无论是否有子目录,都是打开文档
    wilsons
    @wilsons 我指的是如果在我的插件的基础上
    zxkmm 1
  • wenbocn 1 评论

    感谢 @zxkmm 大佬更新插件!已经把您的评论内容能点赞的都点赞了!非常感谢!👍

    但还是想要一个 js 代码,因为后面如果有其它想法的话(例如忽然觉得按文件图标区分可能更好,而不是按是否有子文档),自己可能以问询 AI,就能简单修改一下,具有较大的可操作性。因此还是想要一个 js 代码,请问 @wilsons 大佬能否帮忙写一个 js 代码,谢谢!!

    2 回复
    插件有设置的,你可以自由开关
    zxkmm
  • 好的,我空了试试吧。今天打算写写文章和教程,怕以后自己长时间不用思源忘了,备用。今天状态不佳,可能没休息好,以前想写的,硬是感觉没内容可写了。😳

    1 回复
  • wenbocn 1 赞同

    是的,有时也会这样。所以平时有想法时,即便方案不完善,也要随便记上几笔。不然仅靠脑袋回想当时的想法确实总是会感觉丢了一些东西。辛苦大佬,先好好休息!

  • 然后其实不用给我点赞,因为积分对我没啥用

  • wilsons 2 5 评论

    已经实现了,代码 https://gitee.com/wish163/mysoft/blob/main/%E6%80%9D%E6%BA%90/%E5%B7%A6%E4%BE%A7%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E9%94%AE%E6%89%93%E5%BC%80%E5%92%8C%E7%82%B9%E5%87%BB%E5%B1%95%E5%BC%80.js

    pc 版 中键打开,单击展开
    触屏版 长按打开,点击展开


    @zxkmm 我发现一个方便判断是否空文件的 api /api/block/getTreeStat 传入文档 id 即可,返回值有个字段 runeCount 代表字符个数的意思 0 是空文档,大于 0 非空文档

    1 回复
    感谢,等我油孔对比下哪种比较快
    zxkmm
    快慢这个要看思源 api 实现了,不过,这个比较精准 。其实之前还想到一种方法,就是通过/api/filetree/getDoc 获取文档的内容,由于这个 api 是动态加载,一般不会加载太多内容,然后空文档的时候,这个返回结果的 content 字段长度是 239,可以依据这长度判断,比如大于 500 铁定非空文档,小于 500 的话,就用 lute 把块转换为 markdown 去掉换行和{: xxx}标记后,看内容是否为空,为空则是空文档,为什么选 500,为了兼容性更好,也可以直接用 239 判断,但不知道不同版本是否有出入。
    wilsons 1
    @wilsons 话说 runeCount 和 wordCount 有啥区别 (b.t.w.我对比了下发现 sql 和 api 速度没有太多差别)
    zxkmm
    @zxkmm runeCount 是字符统计,比如 hello 有 5 个字符;wordCount 是字统计,英文是单词,中文应该是一个汉字,比如 Hello, 世界! 😊 是 7 个字,hello 是 1 个,逗号,空格,感叹号,表情各 1 个,世界 2 个,共 7 个,在编辑器里可以测试下。另外,我刚才大致看了下 getTreeStat 是一次性读入 sy 文件到内存,文件大了应该有性能瓶颈,还是建议使用 getDoc api 这个是动态加载按需加载,就是实现起来复杂了些。
    wilsons 1
    @wilsons 感谢大佬
    zxkmm
  • wenbocn

    赞,太给力了 👍 👍👍

    一个小问题,按中键打开文档时,能否取消原中键的滚动功能?

    7ea4729d3a5c9b1e9d86e6afcacc365.jpg

    1 回复
  • wilsons 1

    可以了,更新下代码再试试

    1 回复
  • wenbocn 8 评论

    可以了,非常感谢!!现在的方式就是我原来预期的结果。👍 👍👍

    今天 @zxkmm 新提出了一种方案,左键点击文档条目,如果文档为空,且有子文档的话,展开不打开;如果文档不为空的话,打开且展开。感觉这个方案也很好,请问您方便添加上这个选项吗?

    另外,能否中键点击最后一级文档,也能够打开?

    1 回复
    已经实现在插件里面了
    zxkmm
    最后一级文档是什么意思?意思是中键无论点击文档还是文件夹都打开?
    wilsons
    @wilsons 是的
    wenbocn
    @wilsons 或者改为,发现文档内容为空,而且有子文档的话,自动设置其图标为文件夹形式。而内容不为空的不更改。只修改文件图标,不更改打开方式,这样可以吗?
    wenbocn
    @wenbocn 都行,看你需要,建议想清楚使用场景后决定哪种方式,不然到时候不能满足需要就白忙活了。
    wilsons
    @wilsons 判断文件是否为空,修改文件图标,不更改打开方式。感觉这种方式好,请大佬帮忙改一下 js,非常感谢 😁
    wenbocn
    @wenbocn 确认下,1. 中键无论点击文档还是文件夹都打开 2. 文件夹被单击的时候,如果文件内容为空,修改为指定的图标,对吗?
    wilsons
    @wilsons 是的是的。
    wenbocn
  • wilsons 1

    https://gitee.com/wish163/mysoft/blob/main/%E6%80%9D%E6%BA%90/%E5%B7%A6%E4%BE%A7%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E9%94%AE%E6%89%93%E5%BC%80%E5%92%8C%E7%82%B9%E5%87%BB%E5%B1%95%E5%BC%80.js#

    应该没啥问题。

    // 空文件夹图标代码 📂 1f4c2 📁 1f4c1
    const emptyFolderIconCode = '1f4c2';


    @wenbocn 为了通用性,我加了两个变量,isUpdateFolderIconWhenItEmpty 是否更改文件夹图标,默认不更改,如果你下次复制代码把这个参数改为 true 就好了

    openFolderBy 文件夹打开方式,默认中键,可设置为双击

    // 是否更改空文件夹图标
    const isUpdateFolderIconWhenItEmpty = false;

    // 打开文件夹的方式 midclick 中键 dblclick 双击
    const openFolderBy = 'midclick';

    3 回复
    1 操作
    wilsons 在 2025-01-13 08:56:00 更新了该回帖
  • wenbocn

    我这边文件图标修改没起作用呢(win11),我试一下 win10 系统

  • wenbocn

    能否确认一下,我这边文件图标修改没有其作用呢,win10、win11 都不行,思源版本 3.1.19

    1 回复
  • 我 Mac 3.1.10 和 Windows 3.1.14 都没问题,我等下升级下试试。

    要确保文件夹是是空的,不能有任何非空字符

    image.png

    1 回复
  • wenbocn

    可能是新版本的问题,在 3.1.19 中,新建一个文档,默认是这样的

    image.png

    1 回复
  • 改好了,重新更新下代码,思源新版 api 变了,没有向下兼容。

    目前仅点击时,文件夹是空文件才更改图标,中键没支持,如果支持的话加上调用就好,看你需要。

    2 回复
  • wenbocn 2 评论

    好用了 👍👍👍 。

    中键没支持的意思的中键点击不会修改文件夹图标是吗?

    是的
    wilsons
    @wilsons 感谢提醒,感觉不需要中键修改图标,不添加这个功能了。
    wenbocn
  • wenbocn 3 评论

    请问能否判断文档是否已经自定义图标了,如果已经自定义了的话,不修改?

    image.png

    1 回复
    1 操作
    wenbocn 在 2025-01-13 00:51:26 更新了该回帖
    没判断,你要说明下什么是默认图标,现在默认图标可以修改,siyuan 配置中的图标为依据可以,比如,不是配置中的图标认为是用户自定义,否则就是默认,但这个默认也是可以设置的,反正就是以这个设置为默认,用户手动选择的为非默认可以吧。
    wilsons
    @wilsons 能否以在文档中没有显示图标为默认,默认的情况下,打开文档是没有图标的
    wenbocn
    @wilsons 好的,你考虑的周到 👍
    wenbocn
  • image.png

    这个不是没有图标,是默认图标,你可能说的是图标选择窗口,那是程序判断的事情,事实上是有默认图标的

  • wilsons 2

    改好了,再更新代码试试

    // 思源默认图标,首先读取用户自定义的默认图标,没有用官方默认图标,也可在这里写死
    const defaultIconCode = siyuan?.storage["local-images"]?.folder || '1f4d1';

    1 回复
  • wenbocn 2 评论

    完美,非常感谢!解决了一大痛点!👍 👍👍

    不客气哈,早点休息,886
    wilsons
    @wilsons 哈哈,安心睡觉啦,886
    wenbocn
  • Floria233 1 评论

    感谢,这个关注好几天了,确实很有用。我也有差不多类似的需求,只是之前一直偷懒没有多想(懒到宁愿一直用文档树那个小折叠号,一直都这么麻烦),而且也描绘不清楚这个痛点究竟该怎么解决,800 分太壕了,感谢发帖的大大和回帖的大大 😄 造福一众小白啊哈哈

    壕无人性
    HugZephyr
  • wenbocn 4 评论

    发现一个小技巧,使用下面的 css,使文档树条目前图标点击无效(不弹出修改图标的选项),配合本帖 @wilsons 大佬的 js,可实现左键点击文档树条目前图标打开文档,点击条目文字内容展开文档树的功能。

    /* 条目前图标点击无效 */ .b3-list-item__icon { pointer-events: none !important; }
    👍 我当时注意到了这个图标问题,由于不通用就没加,有些人还是需要点击修改图标的。手机版由于图标不能更改,就加了同文本点击同样的功能。
    wilsons
    @wilsons 👍👍 很专业,你能想的很周到,赞!
    wenbocn
    @wenbocn 其实还有一点忽略的地方,目前的方式不支持动态创建的笔记本及从关闭恢复的笔记,必须刷新下页面才行,按理说应该监控笔记创建等,但这种场景不多,且刷新下就解决了,增加监控带来复杂度就没加,其实链滴很多代码都会有这些问题,所以有时刷新是解决问题的万能办法。😄
    wilsons
    @wilsons OK,收到,已经很好了。很实用。
    wenbocn
  • wenbocn

    👍👍 收到

  • wenbocn

    大佬,最近这个 js 经常性的失效呢(3.1.28),需要重启或刷新一下才能起作用 @wilsons

    1 回复
  • 具体是什么功能失效,最好找出触发条件。检查下是不是其他 js 影响,我也一直在用,没问题。

    2 回复
  • wenbocn

    好像是把软件静置一段时间不用,容易发生这种情况。我再观察观察,看能否找到可重复步骤

    1 回复
  • 嗯,我除了更改文件夹图标没用,其他都用了,我是双击打开文件夹,没发现过有问题。

    1 回复
  • wenbocn 1 评论

    点击条目应该的展开子条目的,失效时会变成打开文档,并且点击其它文档也是打开文档。刷新页面后恢复展开条目功能

    哦,我这边一直正常,估计与其他插件啥的冲突了,有些插件或 js 并没有告诉你都有哪些功能,可能某个隐藏功能影响了也不一定。 你可以找一个环境配置啥的一样,但没有其他 js 影响的环境对比观察下。
    wilsons
  • wenbocn 1 赞同

    image.png

    image.png

    会不会是文件夹图标的问题,我现在文档树中显示的是蓝色图标

    使用这个插件后,图标有黄色变为了蓝色

    image.png

  • wenbocn 1 评论

    😂 赞同的意思是,应该是图标改变导致的吗?@wilsons

    可能,先关掉试试呗,一个个排查,或者你用两个环境对比测试,就像我前面说的,两个完全一致的环境,但一个没有其他插件等影响的环境试试。
    wilsons
  • 代码有更新。

    解决了无法 ctrl 和 shift 选择文件夹问题。

请输入回帖内容 ...

推荐标签 标签

  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 4 关注
  • OnlyOffice
    4 引用 • 22 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    168 引用 • 597 回帖
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 178 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖 • 1 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 1 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 57 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 733 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    435 引用 • 1250 回帖 • 593 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    290 引用 • 4494 回帖 • 654 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • 叶归
    8 引用 • 38 回帖 • 18 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 500 关注
  • CodeMirror
    2 引用 • 17 回帖 • 162 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 2 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 223 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 629 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 636 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    175 引用 • 3854 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    54 引用 • 44 回帖 • 1 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    557 引用 • 675 回帖
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 2 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 2 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 678 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 1 关注