Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 91视频电影,色菇凉天天综合网,国产精品毛片在线完整版sa

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          書簽轉json格式代碼(chrome,edge...)

          前書簽導出大部分都是html,此代碼可以將書簽提取為json格式。

          1:導出書簽為html文件

          2:在文件中加入以下代碼,可自行根據需要編輯修改

          3:在控制臺第一行復制json文本


          <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
          <script>
              $(document).ready(function() {
                  var rootTag = $("DL").eq(0);
                  getAll(rootTag, json);
                  console.log(JSON.stringify(json));
                  console.log(json);
          
              })
              var json = [];
          
              function getAll(tag, datas) {
                  $.each($(tag).children("dt"), function(index, item) {
                      if ($(item).children(":has(a)").length == 0) {
                          datas.push({
                              name: $(item).children("a").html(),
                              href: $(item).children("a").attr("href"),
                          });
                      } else {
                          var ssd = {
                              name: $(item).children("h3").html(),
                              children: []
                          };
                          datas.push(ssd);
                          $.each($(item).children("dl"), function(index, item2) {
                              getAll(item2, ssd.children);
                          });
                      }
                  })
              }
          </script>

          ?

          前為了把瀏覽器書簽放到博客里維護,特意寫了一個 bookmark 轉 json/markdown 的小工具:parse-bookmark。

          前幾天手賤直接把 bookmark 的源文件給刪了,這下這么多年收藏整理的書簽只有自己博客里的一個 markdown 文件了,畢竟還是直接用瀏覽器自帶的 bookmark 查看會方便好多,只能想辦法怎么根據現在的 markdowm 文件轉換回 bookmark.html 文件了。

          markdown 文件長這樣:

          # 我的書簽bookmark
          
          ### 博客
          * [我的博客](https://cafehaus.github.io/blog)
          * [知乎](https://zhuanlan.zhihu.com/)
          * [簡書](https://www.jianshu.com/)
          
          ### 工具
          * [在線圖片壓縮](https://tinyjpg.com/)
          * [TinyPNG – Developer API](https://tinypng.com/developers)
          * [在線GIF動圖壓縮](https://docsmall.com/gif-compress)
          
          ...

          從谷歌瀏覽器中導出的書簽長這樣:

          <!DOCTYPE NETSCAPE-Bookmark-file-1>
          <!-- This is an automatically generated file.
               It will be read and overwritten.
               DO NOT EDIT! -->
          <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
          <TITLE>Bookmarks</TITLE>
          <H1>Bookmarks</H1>
          <DL><p>
              <DT><H3 ADD_DATE="1691296878" LAST_MODIFIED="1692859249" PERSONAL_TOOLBAR_FOLDER="true">書簽欄</H3>
              <DL><p>
                  <DT><H3 ADD_DATE="1692858364" LAST_MODIFIED="1692858643">博客</H3>
                  <DL><p>
                      <DT><A HREF="https://cafehaus.github.io/blog">我的博客</A>
                      <DT><A HREF="https://zhuanlan.zhihu.com/">知乎</A>
                      <DT><A HREF="https://www.jianshu.com/">簡書</A>
                  </DL><p>
                  <DT><H3 ADD_DATE="1692858766" LAST_MODIFIED="1692859444">工具</H3>
                  <DL><p>
                      <DT><A HREF="https://tinyjpg.com/" ADD_DATE="1692858571">在線圖片壓縮]</A>
                      <DT><A HREF="https://tinypng.com/developers" ADD_DATE="1692858571">TinyPNG – Developer API</A>
                      <DT><A HREF="https://docsmall.com/gif-compress" ADD_DATE="1692858571">在線GIF動圖壓縮</A>
                  </DL><p>
              </DL><p>
          </DL><p>

          所以現在需要做的就是怎么能更快速地從上面的 markdown 文件轉換成下面的 html 格式文件,注意這里的 html 文件和我們平時前端開發里寫的 html 還有點不太一樣。

          轉換步驟:

          1、復制 markdown 里的每一條書簽

          剛開始本來是打算自己手動一個一個復制過來修改的,先把主要內容和格式搞過來,這一步完成后大概長這樣,大部分工作都是復制粘貼,還算比較輕松:

          <!DOCTYPE NETSCAPE-Bookmark-file-1>
          <!-- This is an automatically generated file.
               It will be read and overwritten.
               DO NOT EDIT! -->
          <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
          <TITLE>Bookmarks</TITLE>
          <H1>Bookmarks</H1>
          <DL><p>
              <DT><H3 ADD_DATE="1691296878" LAST_MODIFIED="1692859249" PERSONAL_TOOLBAR_FOLDER="true">書簽欄</H3>
              <DL><p>
                  <DT><H3 ADD_DATE="1692858364" LAST_MODIFIED="1692858643">博客</H3>
                  <DL><p>
                      * [我的博客](https://cafehaus.github.io/blog/)
                      * [知乎](https://zhuanlan.zhihu.com/)
                      * [簡書](https://www.jianshu.com/)
                  </DL><p>
              </DL><p>
          </DL><p>

          2、替換每條書簽的開始部分

          這一步直接用開發工具的全局替換就行了,將 * [ 替換成 DT 和 A 標簽,A 標簽的 HREF 屬性先默認為空,等后面再處理:

          <!DOCTYPE NETSCAPE-Bookmark-file-1>
          <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
          <TITLE>Bookmarks</TITLE>
          <H1>Bookmarks</H1>
          <DL><p>
              <DT><H3 ADD_DATE="1691296878" LAST_MODIFIED="1692859249" PERSONAL_TOOLBAR_FOLDER="true">書簽欄</H3>
              <DL><p>
                  <DT><H3 ADD_DATE="1692858364" LAST_MODIFIED="1692858643">博客</H3>
                  <DL><p>
                      <DT><A HREF="">我的博客](https://cafehaus.github.io/blog/)
                      <DT><A HREF="">知乎](https://zhuanlan.zhihu.com/)
                      <DT><A HREF="">簡書](https://www.jianshu.com/)
                  </DL><p>
              </DL><p>
          </DL><p>

          3、替換 A 標簽的 HREF 屬性

          剛開始我也是自己一個一個手動先選中 ctrl x 剪切掉后面的地址,然后粘貼到前面的 HREF 里,大概剪切粘貼了1/3實在覺得這樣效率太慢了,也沒心思再剪切粘貼了。

          然后就開始來寫個腳本直接用正則替換內容,無非就是用正則匹配出來后面的地址然后放到 HREF 里去:

          const fs = require('node:fs')
          const path = require('node:path')
          
          fs.readFile(path.join(__dirname, './bookmarks_2023_8_24.html'), 'utf-8', async (err, data) => {
              if (err) return console.error(err)
              const reg = /<DT><A HREF="">([A-Za-z0-9\u4e00-\u9fa5.-–-—+_~:·,!?#??’'??:、,;。!|【】\[\]\$¥\(\)()「」&《》\s  ?]*)\]\((http\S+)\)<\/A>/g
              const text = data.replaceAll(reg, '<DT><A HREF="$2">$1</A>')
          
              fs.writeFile(path.join(__dirname, './bookmarks.html'), text, (err, data) => {
                  if (err) return console.error(err)
                  console.log('success')
              })
          })

          總共也就 13 行代碼就搞定了,果然科技才是第一生產力,幾個小時的手工活用代碼1秒鐘搞定!

          注意因為轉換的數據里沒有設置 icon 這個屬性,所以默認在書簽里打開前面的圖標默認都是灰色的,只要訪問當前書簽后,瀏覽器會自動更新前面的小 icon 的。

          • 用兩個空格來代替制表符(tab) -- 這是唯一能保證在所有環境下獲得一致展現的方法。

          • 嵌套元素應當縮進一次(即兩個空格)。

          • 對于屬性的定義,確保全部使用雙引號,絕不要使用單引號。

          • 不要在自閉合(self-closing)元素的尾部添加斜線 -- HTML5 規范中明確說明這是可選的。

          • 不要省略可選的結束標簽(closing tag)(例如,</li></body>)。

          實例:

          <!DOCTYPE html><html>

          HTML5 doctype

          為每個 HTML 頁面的第一行添加標準模式(standard mode)的聲明,這樣能夠確保在每個瀏覽器中擁有一致的展現。

          實例:

          <!DOCTYPE html><html>

          語言屬性

          根據 HTML5 規范:

          強烈建議為 html 根元素指定 lang 屬性,從而為文檔設置正確的語言。這將有助于語音合成工具確定其所應該采用的發音,有助于翻譯工具確定其翻譯時所應遵守的規則等等。

          lang 屬性的知識可以從 此規范 中了解。

          這里列出了語言代碼表。

          <html lang="zh-CN">

          IE 兼容模式

          IE 支持通過特定的 <meta> 標簽來確定繪制當前頁面所應該采用的 IE 版本。除非有強烈的特殊需求,否則最好是設置為 edge mode,從而通知 IE 采用其所支持的最新的模式。

          <meta http-equiv="X-UA-Compatible" content="IE=Edge">

          字符編碼

          通過明確聲明字符編碼,能夠確保瀏覽器快速并容易的判斷頁面內容的渲染方式。這樣做的好處是,可以避免在 HTML 中使用字符實體標記(character entity),從而全部與文檔編碼一致(一般采用 UTF-8 編碼)。

          <head>

          引入 CSS 和 JavaScript 文件

          根據 HTML5 規范,在引入 CSS 和 JavaScript 文件時一般不需要指定 type 屬性,因為 text/csstext/javascript 分別是它們的默認值。

          HTML5 spec links

          • Using link

          • Using style

          • Using script

          <!-- External CSS --><link rel="stylesheet" href="code-guide.css"><!-- In-document CSS --><style>

          實用為王

          盡量遵循 HTML 標準和語義,但是不要以犧牲實用性為代價。任何時候都要盡量使用最少的標簽并保持最小的復雜度。

          屬性順序

          HTML 屬性應當按照以下給出的順序依次排列,確保代碼的易讀性。

          • class

          • id, name

          • data-*

          • src, for, type, href

          • title, alt

          • aria-*, role

          class 用于標識高度可復用組件,因此應該排在首位。id 用于標識具體組件,應當謹慎使用(例如,頁面內的書簽),因此排在第二位。

          <a class="..." id="..." data-modal="toggle" href="#">

          布爾(boolean)型屬性

          布爾型屬性可以在聲明時不賦值。XHTML 規范要求為其賦值,但是 HTML5 規范不需要。

          更多信息請參考 WhatWG section on boolean attributes:

          元素的布爾型屬性如果有值,就是 true,如果沒有值,就是 false。

          如果一定要為其賦值的話,請參考 WhatWG 規范:

          如果屬性存在,其值必須是空字符串或 [...] 屬性的規范名稱,并且不要在首尾添加空白符。

          簡單來說,就是不用賦值。

          <input type="text" disabled><input type="checkbox" value="1" checked><select>

          減少標簽的數量

          編寫 HTML 代碼時,盡量避免多余的父元素。很多時候,這需要迭代和重構來實現。請看下面的案例:

          <!-- Not so great --><span class="avatar">

          JavaScript 生成的標簽

          通過 JavaScript 生成的標簽讓內容變得不易查找、編輯,并且降低性能。能避免時盡量避免。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!


          主站蜘蛛池模板: 日本一区二区三区中文字幕| 搡老熟女老女人一区二区| 国产一区二区三区高清视频| 日韩高清国产一区在线| 综合激情区视频一区视频二区| 中文字幕无码一区二区免费 | 国产一区二区三区免费视频| 国产综合一区二区| 精品一区二区三区在线观看l | 中文字幕乱码亚洲精品一区| 国产一区二区不卡在线播放| 国产一区二区三区无码免费| 久久久国产精品无码一区二区三区| 无码少妇精品一区二区免费动态| 亚洲国产高清在线一区二区三区 | 精品一区二区三区东京热 | 国产日韩精品一区二区三区| 亚洲变态另类一区二区三区| 一区二区三区伦理高清| 福利一区在线视频| 影院无码人妻精品一区二区| 激情综合丝袜美女一区二区 | 色婷婷香蕉在线一区二区| 人妖在线精品一区二区三区| 亚洲中文字幕在线无码一区二区 | 亚洲欧美日韩中文字幕在线一区 | 久久无码一区二区三区少妇 | 亚洲一区免费观看| 久久久久99人妻一区二区三区| 日本一区二区不卡在线| 国产精品毛片VA一区二区三区| 中文字幕精品一区二区精品 | 相泽南亚洲一区二区在线播放| 天堂Av无码Av一区二区三区| 久久精品免费一区二区喷潮| 色屁屁一区二区三区视频国产| 国产一区二区三区小向美奈子| 一区二区三区免费精品视频| 国产一区二区三区久久| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国产免费无码一区二区|