PageSourceSearch

https://jandan.net/treehole

html jandan.net collected 2026-10-02 04:26:25 UTC 40,040 bytes, 870 lines download raw bytes

1<!DOCTYPE html>
2<html lang="zh-CN">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1">
6
7
8    <title>
9        树洞    </title>
10
11    
12    <meta name="keywords" content="煎蛋树洞, 情感倾诉, 情绪释放, 心事分享, 网络树洞, 情感交流, 秘密分享, 心情倾诉"/>
13    <meta name="description" content="煎蛋树洞是倾诉与情绪释放的温暖角落,用户可无拘无束分享心事和秘密,寻找共鸣,释放压力,做真实的自己。"/>
14
15        <link rel="canonical" href="https://jandan.net/treehole" />
16    
17    <meta http-equiv="X-UA-Compatible" content="IE=edge">
18    <meta name="renderer" content="webkit">
19
20    
21            <meta name="robots" content="index,follow">
22    
23    <!-- 图标区 -->
24    <link rel="apple-touch-icon" href="data:image/png;base64,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">
25    <link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz6///M+v//zPr//8z6///M+v//zPr//84Zf//OGX//zhl//84Zf//M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///OGX//zhl//84Zf//OGX//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zhl//84Zf//OGX//zhl//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zM0Nv8zNDb/M+v//zPr//8z6///M+v//zPr//8z6///MzQ2/zM0Nv8z6///M+v//zPr//8z6///M+v//zPr//8zNDb/MzQ2/zPr//8z6///M+v//zPr//8z6///M+v//zM0Nv8zNDb/M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M9n//zPZ//8z2f//M9n//zPr//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M9n//zPZ//8z2f//M9n//wAAAAAAAAAAAAAAADPZ//8z6///M+v//zPr//8z6///M+v//zPr//8z6///M+v//zPZ//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz2f//M9n//zPZ//8z2f//M9n//zPZ//8z2f//M9n//zPZ//8z2f//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc14/83NeP/NzXj/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3NeP/NzXj/zc14/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzXj/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgBwAA4AcAAP4/AAD+PwAA/v8AAA=="/>
26
27
28    <!-- css 库 -->
29    <link href="//cdn.jandan.net/static/css/bootstrap/5.1.3/bootstrap.min.css" type="text/css" rel="stylesheet" />
30    <link href="//cdn.jandan.net/static/css/bootstrap-icons/1.13.1/font/bootstrap-icons.min.css" type="text/css" rel="stylesheet" />
31    <link rel="stylesheet" href="/wp-content/themes/jandan2025/static/20260911090541/aa42d365f5ef0734b1ef03325c18d4b8tKyVlmma.css">
32
33    <!-- 自定义JS -->
34    
34<script>
35
36        // 开启黑暗模式
37        if (localStorage.getItem('darkMode') === 'true') {
38            document.documentElement.classList.add('dark-model');
39        }
40
41        const $JANDAN = {
42            GO_API: false,
43            IS_MOBILE : false,
44            COOKIE_HASH : '01b0531fab6a989460dd1b231010b496',
45            SITE_URL : 'http://jandan.net',
46            API_URL : '//jandan.net'
47        };
48        if (window !== top) top.location.href = window.location.href;
49        eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(g(){1 d=["j","a","0","d","a","0",".","0","e","f"];1 3=7 8(d.2(\'\')+\'$\');4(!3.9(b.c)){1 a=5.6.h;4(a==\'/\'){a=\'\'}5.6.i=\'k://\'+d.2(\'\')+\'/\'+a}})($l);',22,22,'n|var|join|r|if|window|location|new|RegExp|test||document|domain|||t|function|pathname|href||http|JANDAN'.split('|'),0,{}));
50    </script>
50
51</head>
52<body>
53<!-- 全站容器 -->
54<div class="container wrapper p-0" id="main-warpper">
55<header class="text-white text-center position-relative" id="header">
56    <div class="logo">
57        <a href="/">
58            <span class="logo-container"></span>
59        </a>
60        <div class="header-actions position-absolute">
61            <a class="header-notice" href="/new/member/message">
62                <i class="bi bi-envelope"></i><span class="notice_num">20</span>
63            </a>
64            <a class="header-user" href="/new/member">
65                <i class="bi bi-person-fill d-md-none"></i>
66                <span class="d-none d-md-inline-block">用户中心</span>
67            </a>
68            <span class="header-model-btn model-btn">
69                <i class="bi bi-moon-fill"></i>
70            </span>
71        </div>
72    </div>
73</header>
74<nav id="nav">
75    <div class="container">
76        <div class="position-relative navbar navbar-level1">
77            <!-- 主导航和more-menu容器 -->
78            <div class="d-flex align-items-center flex-grow-1">
79                <ul class="align-middle main-nav">
80                    <li class="nav-item"><a class="nav-link p-1 " href="/" id="nav-0">首页</a></li>
81                    <!-- <li class="nav-item d-none d-sm-block"><a class="nav-link p-1 " href="/qa" id="nav-88399">问答</a></li> -->
82                    <li class="nav-item"><a class="nav-link p-1 current" href="/treehole" id="nav-102312">树洞</a></li>
83                    <li class="nav-item d-none d-sm-block"><a class="nav-link p-1 " href="/beauty" id="nav-108629">女装</a></li>
84                    <li class="nav-item d-none d-sm-block"><a class="nav-link p-1 " href="/ooxx" id="nav-21183">随手拍</a></li>
85                    <li class="nav-item"><a class="nav-link p-1 " href="/pic" id="nav-26402">无聊图</a></li>
86                    <li class="nav-item "><a class="nav-link p-1 " href="/new/forum" id="nav-112928">鱼塘</a></li>
87                    <li class="nav-item"><a class="nav-link p-1 " href="/top" id="nav-76694">热榜</a></li>
88                    <li class="nav-item"><a class="nav-link p-1" href="/new/daily">日报</a></li>
89                    <li class="nav-item"><a class="nav-link p-1 " href="/tucao" id="nav-21221">大吐槽</a></li>
90                    <li class="nav-item d-none d-sm-block"><a class="nav-link p-1" href="https://reader.jandan.net" id="nav-21221">阅读器</a></li>
91                    <li class="nav-item d-block d-sm-none align-middle" id="nav-more"><a class="nav-link p-1" href="javascript:;"><i class="bi bi-three-dots"></i></a></li>
92                </ul>
93            </div>
94
95        </div>
96        <div class="position-relative navbar d-none navbar-level2">
97            <!-- 主导航和more-menu容器 -->
98            <div class="d-flex align-items-center flex-grow-1">
99                <ul class="align-middle main-nav">
100
101                </ul>
102            </div>
103        </div>
104    </div>
105</nav>
106    <div class="container">
107        <div class="row">
108            <!-- 主内容区域 -->
109            <main class="main col-lg-8 col-md-8 col-12">
110                                                        <div class="row">
111                        <nav aria-label="breadcrumb" class="breadcrumb">
112                            <ol>
113                                <li class="breadcrumb-item"><a href="/">主页</a></li>
114                                <li class="breadcrumb-item active" aria-current="page">树洞</li>
115                            </ol>
116                        </nav>
117                    </div>
118                    <div class="row">
119                        <div class="p-0">
120                            <h1 class="post-h1 p-2">树洞</h1>
121                        </div>
122                        <div class="post">
123                            <div class="post-content">
124                                <h5>“每个人都需要一个树洞,存放那些无法言说的秘密和情绪”</h5>
125<p>在煎蛋树洞,你可以表达心事、倾诉烦恼、发泄情绪,找到理解与共鸣的声音,无需伪装,做真实的自己</p>
126<blockquote data-nosnippet><p>
127如果情绪需要宣泄,心理问题需要疏导<br />
128全国统一心理援助热线电话号码 12356
129</p></blockquote>
130                            </div>
131                        </div>
132                    </div>
133                    <div class="row">
134                        <div></div>
135                        <div class="comment" id="jandan-app"></div>
136                    </div>
137
138                    
138<script>
139                        const PAGE = {
140                            id: 102312                        };
141                    </script>
141
142                            </main>
143            <!-- 侧边栏 -->
144                <!-- 侧边栏 -->
145    <aside class="col-lg-4 col-md-4 d-none d-md-block sidebar">
146        <div class="row">
147            <div class="search-form">
148
149                <form action="https://www.bing.com/search" method="get" onsubmit="_submit()" id="searchform" target="_blank">
150                    <input type="text" name="q" id='bingsearch' onfocus="_onfocus()" value="" placeholder="搜索:" required>
151                    <input type="hidden" name="site" value="jandan.net">
152                </form>
153                
153<script>
154                    function _submit() {
155                        document.getElementById("bingsearch").value = document.getElementById("bingsearch").value + ' site:jandan.net';
156                    }
157
158                    function _onfocus() {
159                        document.getElementById("bingsearch").value = '';
160                    }
161                </script>
161
162            </div>
163        </div>
164
165        <div class="row">
166            <h3 class="nav-header">周边</h3>
167            <div class="text">
168                <a href="https://item.taobao.com/item.htm?id=1076906538728"><img src="/static/tg/wangmoyu_02.png" alt="煎蛋周边" style="width: 100%;"></a>
169                                                            </div>
170        </div>
171
172
173        <div class="row">
174            <h3 class="nav-header">新功能</h3>
175            <div class="text">
176                <a href="https://reader.jandan.net"><img src="/static/tg/ereader-01.png" alt="煎蛋电子书阅读器" style="width: 100%;"></a>
177            </div>
178        </div>
179
180
181        <div class="row">
182            <h3 class="nav-header">站务公告</h3>
183            <div class="text">
184                <ul>
185                    <li>* <a href="/p/123743">煎蛋日报上线开放测试</a></li>
186                    <li>* <a href="/ereader">煎蛋电子书阅读器上线测试</a></li>
187                    <li>* <a href="/t/6180514">煎蛋网问答分区关闭通知</a></li>
188                    <li>* <a href="/rule">煎蛋网社区管理规定</a></li>
189                    <li>* <a href="/official-channels">煎蛋网官方渠道公示</a></li>
190                </ul>
191            </div>
192        </div>
193            <div class="row">
194            <h3 class="nav-header">煎蛋传送门</h3>
195            <div class="text">
196                <ul>
197                    <li>* 反馈:[email protected]</li>
198                    <li>* 投稿:<a href="/app">微信小程序煎蛋(扫码)</a></li>
199                    <li>* APP:<a href="https://jandan.net/app">jandan.net/app</a></li>
200                    <li>* 公众号:王摸鱼</li>
201                </ul>
202            </div>
203        </div>
204                    <div class="row">
205                <h3 class="nav-header">鱼塘</h3>
206                <div id="sidebar-bbs"></div>
207                
207<script type="text/html" id="sidebar-bbs-tpl">
208                    <ul class="bbs-list">
209                        {{each list}}
210                        {{if $index <= 10}}
211                        <li><a href="/new/forum/topic/{{$value.post_id}}">* {{$value.title}} </a></li>
212                        {{/if}}
213                        {{/each}}
214                    </ul>
215                </script>
215
216            </div>
217                <div class="row">
218            
219            <div id="float-window">
220                                    <h3 class="nav-header">广告</h3>
221                    <div class="text text-center">
222                        
222<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4352453996606420"
223     crossorigin="anonymous"></script>
223
224<!-- square-banner -->
225<ins class="adsbygoogle"
226     style="display:block"
227     data-ad-client="ca-pub-4352453996606420"
228     data-ad-slot="7001170194"
229     data-ad-format="auto"
230     data-full-width-responsive="true"></ins>
231<script>
232     (adsbygoogle = window.adsbygoogle || []).push({});
233</script>
233<span class="dot" data-id="233"></span>                    </div>
234                    <h3 class="nav-header">广告</h3>
235                    <div class="text text-center">
236                        
236<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4352453996606420" crossorigin="anonymous"></script>
236
237<!-- 300x250 -->
238<ins class="adsbygoogle"
239     style="display:inline-block;width:300px;height:250px"
240     data-ad-client="ca-pub-4352453996606420"
241     data-ad-slot="9456096016"></ins>
242<script>
243(adsbygoogle = window.adsbygoogle || []).push({});
244</script>
244                    </div>
245            </div>
246        
247        </div>
248    </aside>
249        </div>
250    </div>
251<footer class="bg-dark text-white text-center py-4" id="footer">
252    <div class="container">
253        <!-- 使用Flex布局,使内容居中并自适应 -->
254        <div class="row">
255            <!-- 左侧部分(包含一组链接) -->
256            <div class="col-12 text-center">
257                <a href="/about" class="text-white">关于我们</a> ·
258                <a href="/guanyu" class="text-white">用户协议</a> ·
259                <a href="/privacy" class="text-white">隐私政策</a> ·
260                <a href="/app" class="text-white">煎蛋APP</a>
261            </div>
262            <div class="col-12 text-center">
263                <a href="https://beian.miit.gov.cn/" target="_blank" class="text-white" rel="external nofollow">鄂ICP备11008023号-1</a> ·
264                <a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=42018502002747" target="_blank" class="text-white" rel="external nofollow">鄂公网安备42018502002747号</a>
265            </div>
266            <div class="col-12 text-center">
267                举报电话 13125131232 · 举报邮箱 [email protected]
268            </div>
269            <div class="col-12 text-center">
270                <a href="/jubao" class="text-white">煎蛋举报入口</a> ·
271                <a target="_blank" href="https://www.12377.cn/" class="text-white">违法和不良信息举报中心</a> ·
272                <a target="_blank" href="https://www.12377.cn/jbxzxq/sql_web.html" class="text-white">涉企举报专区</a>
273            </div>
274        </div>
275    </div>
276</footer>
277
278<div id="nav_top" title="回到页头"><span>▲</span></div>
279
280<!-- 全站容器DIV结束 -->
281</div>
282
283<!-- JS 库 -->
284<script src="//cdn.jandan.net/static/libs/jquery/3.5.1/jquery.min.js" type="application/javascript"></script>
vendor: 1 bytes, line 284
284
285<script src="//cdn.jandan.net/static/libs/bootstrap/5.1.3/js/bootstrap.bundle.js" type="application/javascript"></script>
vendor: 1 bytes, line 285
285
286<script src="//cdn.jandan.net/static/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js" type="application/javascript"></script>
vendor: 1 bytes, line 286
286
287<script src="//cdn.jandan.net/static/libs/art-template/4.13.2/lib/template-web.min.js" type="application/javascript"></script>
287
288<!-- 自定义JS -->
289<script>
290    (function() {
291        // 定义模板渲染过滤器
292        // template.defaults.imports.renderImageHTML = function(content) {
293        //     let $dom = $('<div>').append($.parseHTML(content));
294        //     let imgs = $dom.find('img');
295        //     imgs.each(function(index, element) { // 替换GIF图片到缩略图
296        //         let $this = $(element);
297        //         let url = $this.attr('src');
298        //         // 非GIF直接展示
299        //         if (!/\.gif$/.test(url)) {
300        //             if (!/\.webp$/.test(url)) {
301        //                 url = url + '.webp'
302        //             }
303        //             $this.attr('src', url);
304        //             return;
305        //         }
306        //         // GIF 强行替换缩略图
307        //         //url = url.replace(/(orj360|mw600|large|mw2000|mw1024)/, 'thumb180') + '.webp';
308        //         url = url.replace(/(https?:\/\/[^\/]+?)\/\w+\/(.+)/, '$1/thumb180/$2') + '.webp';
309        //         $this.attr('src', url);
310        //     });
311        //     return $dom.html();
312        // };
313
314        // 检测浏览器是否支持WebP(同步检测,立即返回结果)
315        let supportsWebP = (function() {
316            try {
317                let elem = document.createElement('canvas');
318                return elem.getContext && elem.getContext('2d')
319                    && elem.toDataURL('image/webp').indexOf('data:image/webp') === 0;
320            } catch (e) {
321                return false;
322            }
323        })();
324
325        template.defaults.imports.renderImageHTML = function(content) {
326            // 关键:先把所有src替换成data-src,避免parseHTML时自动加载原图
327            let modifiedContent = content.replace(/<img([^>]*)src=/gi, '<img$1data-src=');
328            let $dom = $('<div>').append($.parseHTML(modifiedContent));
329            let imgs = $dom.find('img');
330
331            imgs.each(function(index, element) {
332                let $this = $(element);
333                let originalUrl = $this.attr('data-src');
334                let alt = $this.attr('alt') || '';
335                let className = $this.attr('class') || '';
336
337                // 判断是否为GIF
338                let isGif = /\.gif$/.test(originalUrl);
339
340                // 生成不同格式的图片URL
341                let finalUrl;
342
343                if (isGif) {
344                    // GIF:生成缩略图的webp
345                    finalUrl = originalUrl.replace(/(https?:\/\/[^\/]+?)\/\w+\/(.+)/, '$1/thumb180/$2') + '.webp';
346                } else {
347                    // 非GIF:根据浏览器支持情况选择格式
348                    if (supportsWebP) {
349                        if (!/\.webp$/.test(originalUrl)) {
350                            finalUrl = originalUrl + '.webp';
351                        } else {
352                            finalUrl = originalUrl;
353                        }
354                    } else {
355                        // 不支持WebP的浏览器用原图
356                        finalUrl = originalUrl.replace(/\.webp$/, '');
357                    }
358                }
359
360                // 直接设置最终的src
361                $this.attr('src', finalUrl);
362                $this.removeAttr('data-src');
363            });
364
365            return $dom.html();
366        };
367
368        function getCookie(name) {
369            let nameEQ = name + "=";
370            let ca = document.cookie.split(';');
371            for (let i = 0; i < ca.length; i++) {
372                let c = ca[i];
373                while (c.charAt(0) === ' ') c = c.substring(1, c.length);
374                if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));
375            }
376            return null;
377        }
378
379        function render_gif_mask(element) {
380            let img = $(element);
381            // 去除先前的load事件
382            img.off('load');
383            let url = img.attr('src');
384            if (!/\.gif/.test(url)) {
385                return;
386            }
387            // 将GIF遮罩的位置调整的和图片一致
388            let mask = $('<div class="gif-mask">PLAY</div>');
389            img.parent().css('position', 'relative');
390            let position = img.position();
391            mask.css({
392                'height': img.height(),
393                'width': img.width(),
394                'line-height': img.height() + 'px',
395                'left': position.left,
396                'top': position.top
397            });
398            img.after(mask);
399            // 将GIF遮罩点击加载动图
400            mask.click(function() {
401                let full_url = url.replace(/thumb180/, 'large');
402                full_url = full_url.replace('.webp', '');
403                img.attr('src', full_url).on('load', function() {
404                    mask.remove();
405                });
406                mask.text('LOADING...');
407            });
408        }
409
410        function load_sidebar_list(url, list) {
411
412            let sidebarTPL = $("#sidebar-top-tpl");
413
414            // 有些场景没有这个模版,容错
415            if (sidebarTPL.length === 0) {
416                return;
417            }
418
419            // 热门-最近4小时
420            $.getJSON(url, function(data) {
421                if (data.code !== 0) {
422                    return;
423                }
424
425                if (data.data.length === 0)
426                    return;
427
428
429
430                let tpl = sidebarTPL.html();
431                let html = template.render(tpl, data);
432                //let list = $("#list-pic");
433                list.html(html);
434                // 绑定OOXX事件
435                bind_ooxx();
436
437                let images = list.find('img');
438                // 移除lazy load,确保load事件能触发,计数逻辑正常工作
439                images.removeAttr('loading');
440
441                function renderShowMoreButtons() {
442                    list.find('.hot-content').each(function() {
443                        let hotContent = $(this);
444                        // 避免重复添加按钮
445                        if (hotContent.find('.show_more').length > 0) {
446                            return;
447                        }
448                        if (this.scrollHeight > 200) {
449                            let show_more = $('<div class="show_more"> ↧  展开</div>');
450                            show_more.click(function() {
451                                let $this = $(this);
452                                if ($this.hasClass('expand')) {
453                                    $this.parent().css('max-height', '200px');
454                                    $this.removeClass('expand');
455                                    $this.text(' ↧  展开');
456                                } else {
457                                    $this.addClass('expand');
458                                    $this.parent().css('max-height', '100%');
459                                    $this.text(' ↥ 收起');
460                                }
461                            });
462                            hotContent.append(show_more);
463                            hotContent.click(function(e) {
464                                // 防递归触发
465                                if (!$(e.target).is(show_more)) {
466                                    show_more.click();
467                                }
468                            });
469                        }
470                    });
471                }
472
473                let loadedCount = 0;
474                let totalImages = images.length;
475
476                function handleImageComplete(imgElement) {
477                    render_gif_mask(imgElement);
478                    loadedCount++;
479                    if (loadedCount >= totalImages) {
480                        renderShowMoreButtons();
481                    }
482                }
483
484                images.on('load', function() {
485                    handleImageComplete(this);
486                });
487
488                images.on('error', function() {
489                    // 图片加载失败也计数,避免卡在这里
490                    loadedCount++;
491                    if (loadedCount >= totalImages) {
492                        renderShowMoreButtons();
493                    }
494                });
495
496                // 处理已经缓存完成的图片(load事件可能已触发)
497                images.each(function() {
498                    if (this.complete) {
499                        handleImageComplete(this);
500                    }
501                });
502
503                // 兜底:3秒后强制渲染按钮,避免某些图片卡住导致永远不显示
504                setTimeout(renderShowMoreButtons, 3000);
505                list.find('.hot-content')
506            }).fail(function(jqxhr, textStatus, error) {
507                console.error('Request Failed: ' + textStatus + ', ' + error);
508            });
509        }
510
511        function bind_ooxx() {
512            let btn = $('a.vote-btn');
513            btn.unbind('click');
514            btn.click(function() {
515                let $this = $(this);
516                if ($this.data('voted')) {
517                    return;
518                }
519                const id = $this.data('id');
520                const type = $this.data('type');
521                $.ajax({
522                    url: "/api/comment/vote", // 替换为你的 API 地址
523                    type: "POST",
524                    contentType: "application/json", // 设置请求头为 JSON
525                    data: JSON.stringify({
526                        "comment_id": id,
527                        "like_type": type,
528                        "data_type": 'comment'
529                    }),
530                    success: function(response) {
531                        const span = $this.next('span');
532                        let num = parseInt(span.text());
533                        span.text(num + 1);
534                        $this.data('voted', true);
535                    },
536                    error: function(xhr, status, error) {
537                        console.error("Request failed:", status, error);
538                    },
539                });
540            });
541        }
542
543        $(document).ready(function() {
544
545            // 图片懒加载
546            $("img.lazy").lazyload();
547
548            // 颜色模式切换
549            $('.model-btn').click(function() {
550                if (localStorage.getItem('darkMode') !== 'true') {
551                    document.documentElement.classList.add('dark-model');
552                    localStorage.setItem('darkMode', 'true');
553                    $(this).find('i').removeClass('bi-moon-fill').addClass('bi-brightness-high');
554                    return;
555                }
556                $(this).find('i').removeClass('bi-brightness-high').addClass('bi-moon-fill');
557                document.documentElement.classList.remove('dark-model');
558                localStorage.setItem('darkMode', 'false');
559            });
560
561            // 回到顶部按钮显示逻辑
562            $(window).scroll(function() {
563                let scrollTop = $(window).scrollTop();
564                if (scrollTop > 400) {
565                    $("#nav_top").show().css('display', 'block');
566                } else {
567                    $("#nav_top").hide();
568                }
569            });
570            // 回到顶部按钮点击逻辑
571            $("#nav_top").click(function() {
572                $('html, body').animate({
573                    scrollTop: 0
574                }, 100);
575            });
576
577            // 计算翻页按钮动态定位
578            function setPageBtnPosition() {
579                const $div = $('#main-warpper');
580                const $leftBtn = $('.nav-next');
581                const $rightBtn = $('.nav-prev');
582
583                if ($rightBtn.length === 0) {
584                    return;
585                }
586
587                const rect = $div[0].getBoundingClientRect();
588
589                if ($leftBtn.length > 0) {
590                    let leftGap = rect.left - 60;
591                    // 左按钮:div 左边 + 10px
592                    $leftBtn.css('top', "50%");
593                    $leftBtn.css('left', leftGap);
594                }
595
596                // 右按钮:div 右边 - 10px - 按钮宽度
597                let rightGap = rect.right + 10;
598                $rightBtn.css('top', "50%");
599                $rightBtn.css('left', rightGap);
600            }
601            // 事件绑定
602            $(window).on('resize scroll', setPageBtnPosition);
603            setPageBtnPosition();
604
605                            // 悬浮浮窗
606                let floatDiv = $('#float-window');
607                if (floatDiv.length > 0) {
608                    let floatOffset = floatDiv.offset();
609                    floatDiv.data('top', floatOffset.top + 250);
610                    $(window).scroll(function() {
611                        let scrollTop = $(document).scrollTop();
612                        let divTop = floatDiv.data('top');
613                        if (scrollTop > divTop) {
614                            floatDiv.addClass('float-window');
615                            return;
616                        }
617                        floatDiv.removeClass('float-window');
618                    });
619                }
620            
621
622                            // 检测是否为移动端(侧边栏是否可见)
623                function isSidebarVisible() {
624                    return $('.sidebar').is(':visible');
625                }
626
627                // 标记是否已经加载过侧边栏内容
628                let sidebarContentLoaded = false;
629                // 标记各个标签是否已加载
630                let tabLoaded = {
631                    pic: false,
632                    hot: false,
633                    ooxx: false,
634                    treehole: false
635                };
636
637                // 加载侧边栏论坛数据
638                function loadSidebarBbs() {
639                    $.getJSON('/api/forum/posts/112928?page=1', function(data) {
640                        if (data.code !== 0) {
641                            return;
642                        }
643                        let tpl = $("#sidebar-bbs-tpl").html();
644                        let html = template.render(tpl, data.data);
645                        $("#sidebar-bbs").html(html);
646                    }).fail(function(jqxhr, textStatus, error) {
647                        console.error('Request Failed: ' + textStatus + ', ' + error);
648                    });
649                }
650
651                // 加载指定标签的内容
652                function loadTabContent(tab) {
653                    let list = $('#list-' + tab);
654                    if (list.children().length > 0 && list.find('.show_more, .hot-item').length > 0) {
655                        return; // 已经加载过了
656                    }
657
658                    let apiUrl;
659                    switch(tab) {
660                        case 'hot':
661                            apiUrl = '/api/top/4hr';
662                            break;
663                        case 'ooxx':
664                            apiUrl = '/api/top/post/21183';
665                            break;
666                        case 'treehole':
667                            apiUrl = '/api/top/post/102312';
668                            break;
669                        case 'pic':
670                        default:
671                            apiUrl = '/api/top/post/26402';
672                            break;
673                    }
674
675                    load_sidebar_list(apiUrl, list);
676                    tabLoaded[tab] = true;
677                }
678
679                // 侧边栏热门切换(立即绑定事件,不依赖侧边栏是否可见)
680                $('.hot-tabs li').click(function() {
681                    let tab = this.id.split('-')[1];
682                    let parent = $(this).parent();
683                    parent.find('li').removeClass('current');
684                    $('.sidebar .hot-list').addClass('d-none');
685                    $(this).addClass('current');
686
687                    let list = $('#list-' + tab);
688                    list.removeClass('d-none');
689
690                    // 如果侧边栏可见且该标签未加载,则加载
691                    if (isSidebarVisible() && !tabLoaded[tab]) {
692                        loadTabContent(tab);
693                    }
694                });
695
696                // 检查并加载侧边栏内容
697                function checkAndLoadSidebar() {
698                    if (!isSidebarVisible()) {
699                        return;
700                    }
701
702                    // 加载论坛数据(只加载一次)
703                    if (!sidebarContentLoaded) {
704                        sidebarContentLoaded = true;
705                        loadSidebarBbs();
706                    }
707
708                    // 加载当前激活的标签
709                    let activeTab = $('.hot-tabs li.current').attr('id').split('-')[1];
710                    if (!tabLoaded[activeTab]) {
711                        loadTabContent(activeTab);
712                    }
713                }
714
715                // 页面加载后检查一次
716                $(window).on('load', function() {
717                    setTimeout(checkAndLoadSidebar, 100);
718                });
719
720                // 窗口大小改变时也检查(比如旋转屏幕)
721                $(window).on('resize', checkAndLoadSidebar);
722                        bind_ooxx();
723
724            // 行为打点
725            let dotData = {};
726                        let ajaxPromise = $.ajax({
727                'url': '/api/post/dot',
728                'data': dotData,
729                dataType: 'json'
730            });
731            ajaxPromise.done(function(resp) {
732
733            });
734
735            let userNickName = getCookie('egg_login_nickname');
736            if (userNickName !== '') {
737                $('#navbar .duan').show();
738                // 未读消息提示
739                $.ajax({
740                    'url': '/api/member/check_notice',
741                    'data': dotData,
742                    dataType: 'json'
743                }).done((resp) => {
744                    if (resp.code === 0) {
745                        let unreadCount = resp.data;
746                        // 没有消息不显示
747                        if (unreadCount === 0) {
748                            return
749                        }
750                        let span = $('.notice_num');
751                        span.css('display', 'inline-block');
752                        // 大于 99 显示 99 +
753                        if (unreadCount > 99) {
754                            span.text('99+');
755                            return;
756                        }
757                        span.text(unreadCount);
758                    }
759                });
760            }
761
762
763            // 移动端折叠菜单
764            let $moreBtn = $('#nav-more');
765            let $navLevel2 = $('.navbar-level2');
766            if ($moreBtn.is(':visible')) {
767                let $navLevel1 = $('.navbar-level1');
768                let li = $navLevel1.find('li.d-sm-block');
769                li.removeClass('d-none');
770                $navLevel2.find('ul').append(li);
771                $moreBtn.click(() => {
772                    $navLevel2.toggleClass('d-none d-block');
773                    if ($navLevel2.is(':visible')) {
774                        localStorage.setItem('jandan:nav-more', "1");
775                        $moreBtn.find('a').html('<i class="bi bi-arrow-bar-up"></i>');
776                    } else {
777                        localStorage.setItem('jandan:nav-more', "0");
778                        $moreBtn.find('a').html('<i class="bi bi-three-dots"></i>');
779                    }
780                });
781                let navMore = localStorage.getItem('jandan:nav-more');
782                if (navMore === "1") {
783                    $moreBtn.trigger('click');
784                }
785            }
786        });
787    }());
788</script>
788
789
790
791
792
793
794
795    
796        
796<script src="//cdn.jandan.net/static/libs/vue/2.6.14/vue.min.js"></script>
796
797        
797<script src="//cdn.jandan.net/static/libs/axios/0.19.2/axios.min.js"></script>
797
798        
798<script src="//cdn.jandan.net/static/libs/vue-lazyload/1.2.6/vue-lazyload.js"></script>
798
799        
799<script src="//cdn.jandan.net/static/libs/modern-screenshot/4.7.0/index.js"></script>
799
800        
800<script src="/wp-content/themes/jandan2025/static/20260911090541/c5944db29c51c59ee8dfe0034ba407de2mbXp8OS.js"></script>
800
801        
801<script src="/wp-content/themes/jandan2025/static/20260911090541/cfdc4e2a67f6992073cb895d137e9dd52qnSz8Ie.js"></script>
801
802    
803    
804
805
806<!-- 统计代码 -->
807<script>
808(function() {
809    const SITE_ID = 1;                    
810    const DOMAIN = 'https://ga.jandan.net'; 
811    
812    function generateRandomCode(length = 16) {
813        const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
814        let result = '';
815        for (let i = 0; i < length; i++) {
816            result += chars.charAt(Math.floor(Math.random() * chars.length));
817        }
818        return result;
819    }
820    
821    let randomCode = localStorage.getItem('matomo_rand_code');
822    if (!randomCode) {
823        randomCode = generateRandomCode();
824        localStorage.setItem('matomo_rand_code', randomCode);
825    }
826    
827    const JS_URL = `${DOMAIN}/_static/js/${randomCode}.js`;
828    const COLLECT_URL = `${DOMAIN}/api/collect/${randomCode}`;
829    
830    window._paq = window._paq || [];
831    
832    _paq.push(['setTrackerUrl', COLLECT_URL]);
833    _paq.push(['setSiteId', SITE_ID]);
834    _paq.push(['trackPageView']);
835    _paq.push(['enableLinkTracking']);
836    
837
838    var script = document.createElement('script');
839    script.type = 'text/javascript';
840    script.async = true;
841    script.src = JS_URL;
842    
843    var firstScript = document.getElementsByTagName('script')[0];
844    firstScript.parentNode.insertBefore(script, firstScript);
845})();
846</script>
846
847
848<script src="/wp-content/themes/jandan2025/static/20260911090541/6b1a5d6b570ca69127fc124bfaf79fa77DuWKxRB.js"></script>
vendor: 1 bytes, line 848
848
849<script>
850JDAnalytics.init();
851</script>
851
852<!-- 统计结束 -->
853
854<!-- Cloudflare Web Analytics -->
855<!--
vendor: 100 bytes, line 855
855 <script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "
855df5cec1c8c8b4360b35d8bdfafe0a19b
vendor: 14 bytes, line 855
855"}'></script> 
855-->
856<!-- End Cloudflare Web Analytics -->
857<!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 64 bytes, lines 857-858
857
858<script async src="https://www.googletagmanager.com/gtag/js?id=
858G-ZDE403EQ65
vendor: 12 bytes, line 858
858"></script>
859<script>
860    
vendor: 155 bytes, lines 860-866
860window.dataLayer = window.dataLayer || [];
861
862    function gtag() {
863        dataLayer.push(arguments);
864    }
865    gtag('js', new Date());
866    gtag('config', '
866G-ZDE403EQ65
vendor: 4 bytes, line 866
866');
867</script>
867
868</body>
869
870</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.