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 午夜视频www,日本一级全黄大片,中文字幕在线网

          整合營銷服務商

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

          免費咨詢熱線:

          前端多個 Tab 頁點擊切換時當前頁面顯示成別的頁面的數據

          來自公眾號:前端真好玩

          大家肯定遇到過這樣類似的場景:多個 Tab 頁點擊切換功能,如果用戶點擊頻繁,很可能會出現。因為每個接口返回信息的時間是不同的,你不能保證先請求的一定最先返回數據,那么就很可能會出現停留在頁面一卻出現別的頁面的數據的情況。這種異步的情況術語稱之為異步競態。這時肯定有讀者會說了,這還不簡單,我能給你輕松想出好幾個解決辦法。節流、防抖、加 Loading!這些做法固然能解決問題,但是都治標不治本,而且還影響了用戶體驗,其實還有種辦法能夠完美解決問題:取消請求。當然了這個取消請求它只是不繼續處理接口后續的響應了,并不是真的把請求給取消了。畢竟請求如果已經發出去的話,我們也不能順著網線把它追回來。我們這邊以 axios 為例來看看怎么取消請求:

          const CancelToken = axios.CancelToken;
          const source = CancelToken.source();
          
          axios.get('/user/12345', {
            cancelToken: source.token
          }).catch(function (thrown) {
            if (axios.isCancel(thrown)) {
              console.log('Request canceled', thrown.message);
            } else {
              // handle error
            }
          });
          
          axios.post('/user/12345', {
            name: 'new name'
          }, {
            cancelToken: source.token
          })
          
          // cancel the request (the message parameter is optional)
          source.cancel('Operation canceled by the user.');
          123456789101112131415161718192021123456789101112131415161718192021



          用法還是挺簡單的,對于可能會出現異步競態的情況下大家可以采用這個方法來解決。簡單好用,還不會影響用戶體驗,封裝下代碼就能用起來了。

          當今互聯網時代,HTML 和 Markdown 都是非常流行的標記語言。HTML 用于構建網頁結構和內容,而 Markdown 則以其簡潔易讀的語法被廣泛用于編寫文檔、博客文章等。在很多場景下,我們需要將 HTML 內容轉換為 Markdown 格式,例如網頁內容抓取、文檔格式轉換等。

          Rust 作為一門以安全、性能和可靠性著稱的系統級編程語言,也提供了相應的庫來處理 HTML 到 Markdown 的轉換。本文將介紹一個名為 htmd 的 Rust 庫,它提供了一種高效且易于使用的方式來完成這項任務。

          htmd 簡介

          htmd 是一個受 JavaScript 庫 turndown.js 啟發而開發的 Rust 庫,用于將 HTML 文檔轉換為 Markdown 格式。它具有以下特點:

          • 功能豐富: 提供了與 turndown.js 相媲美的豐富選項,可以靈活地控制轉換過程。
          • 可靠性高: 通過了 turndown.js 的所有測試用例,確保轉換結果的準確性。
          • 依賴項少: 僅依賴于 html5ever 庫,輕量級且易于集成。
          • 性能優異: 轉換速度快,能夠高效處理大型 HTML 文檔。

          htmd 的安裝

          在使用 htmd 之前,我們需要先安裝它。將以下依賴項添加到你的 Cargo.toml 文件中:

          [dependencies]
          htmd = "0.1"

          htmd 的使用

          基本轉換

          使用 htmd 進行 HTML 到 Markdown 的基本轉換非常簡單。以下代碼展示了如何將一個 <h1> 標簽轉換為 Markdown 中的 # 標題:

          use htmd::HtmlToMarkdown;
          
          fn main() {
              let markdown = HtmlToMarkdown::new();
              let html = "<h1>這是一個標題</h1>";
              let result = markdown.convert(html).unwrap();
              assert_eq!(result, "# 這是一個標題\n");
          }

          跳過標簽

          在某些情況下,我們可能希望跳過 HTML 文檔中的某些標簽,例如 <script><style> 標簽。htmd 提供了 skip_tags 方法來實現這一點:

          use htmd::HtmlToMarkdown;
          
          fn main() {
              let markdown = HtmlToMarkdown::builder()
                  .skip_tags(vec!["script", "style"])
                  .build();
          
              let html = r#"
                  <script>
                      // 一些 JavaScript 代碼
                  </script>
                  <h1>這是一個標題</h1>
              "#;
          
              let result = markdown.convert(html).unwrap();
              assert_eq!(result, "# 這是一個標題\n");
          }

          自定義標簽處理器

          htmd 允許我們自定義標簽處理器來處理特定的 HTML 標簽。例如,我們可以定義一個處理器將 <img> 標簽轉換為 Markdown 中的圖片語法:

          use htmd::{HtmlToMarkdown, HandleResult};
          use html5ever::tendril::StrTendril;
          use html5ever::QualName;
          
          fn main() {
              let markdown = HtmlToMarkdown::builder()
                  .add_handler(
                      vec!["img"],
                      |el| {
                          let src = el
                              .attrs
                              .iter()
                              .find(|(name, _)| name.local.as_ref() == "src")
                              .map(|(_, value)| value.as_ref());
          
                          let alt = el
                              .attrs
                              .iter()
                              .find(|(name, _)| name.local.as_ref() == "alt")
                              .map(|(_, value)| value.as_ref());
          
                          match (src, alt) {
                              (Some(src), Some(alt)) => Some(format!("![{}]({})", alt, src)),
                              _ => None,
                          }
                      },
                  )
                  .build();
          
              let html = r#"<img src="https://example.com/image.jpg" alt="圖片描述">"#;
              let result = markdown.convert(html).unwrap();
              assert_eq!(result, "![圖片描述](https://example.com/image.jpg)\n");
          }

          多線程處理

          htmd 支持多線程處理,可以充分利用多核 CPU 的性能來加速轉換過程。以下代碼展示了如何使用多線程將多個 HTML 文檔轉換為 Markdown:

          use htmd::HtmlToMarkdown;
          use std::sync::Arc;
          use std::thread;
          
          fn main() {
              let markdown = Arc::new(HtmlToMarkdown::new());
              let html_docs = vec![
                  "<h1>文檔 1</h1>",
                  "<h2>文檔 2</h2>",
                  "<h3>文檔 3</h3>",
              ];
          
              let threads: Vec<_> = html_docs
                  .into_iter()
                  .map(|html| {
                      let markdown = markdown.clone();
                      thread::spawn(move || {
                          let result = markdown.convert(html).unwrap();
                          println!("{}", result);
                      })
                  })
                  .collect();
          
              for thread in threads {
                  thread.join().unwrap();
              }
          }

          結論

          htmd 是一個功能強大且易于使用的 Rust 庫,用于將 HTML 文檔轉換為 Markdown 格式。它提供了豐富的選項、自定義標簽處理器和多線程支持,可以滿足各種轉換需求。如果你正在尋找一種高效可靠的 HTML 到 Markdown 轉換解決方案,htmd 絕對值得一試。

          法1:使用onclick事件

          <input type="button" value="按鈕"
          onclick="javascrtpt:window.location. />
          

          或者直接使用button標簽

          <button onclick="window.location.>百度</button>
          

          方法2:在button標簽外套一個a標簽

          <a >
           <button>百度</button>
          </a>
          

          或使用

          <a ><input type="button" value='百度'></a>
          

          方法3:使用JavaScript函數


          主站蜘蛛池模板: 一区在线观看视频| 久久99精品一区二区三区| 午夜福利一区二区三区在线观看 | 香蕉久久AⅤ一区二区三区| 久久er99热精品一区二区| 久久综合一区二区无码| 国产一区视频在线免费观看| 国产经典一区二区三区蜜芽| 国产在线无码一区二区三区视频| 痴汉中文字幕视频一区| 国产精品熟女视频一区二区| 少妇特黄A一区二区三区| 亚洲av成人一区二区三区观看在线| 亚洲AV综合色区无码一区爱AV | 国偷自产Av一区二区三区吞精| 麻豆视频一区二区三区| 无码中文人妻在线一区二区三区 | 日本精品一区二区三区视频| 亚洲视频一区在线| 91福利一区二区| 91精品一区二区综合在线| 日韩免费无码一区二区三区| 蜜桃臀无码内射一区二区三区 | 一区二区三区四区免费视频| 国产精品毛片VA一区二区三区| 国产在线一区二区三区| 亚洲一区二区三区高清| 国产精品视频一区二区三区经| 亚洲一区二区三区丝袜| 日韩精品中文字幕视频一区| 日本一区二区三区不卡在线视频| 免费精品一区二区三区在线观看| 夜精品a一区二区三区| 色综合一区二区三区| 精品亚洲一区二区三区在线观看 | 亚洲欧美国产国产一区二区三区| 国产成人一区二区三中文| 无码AV一区二区三区无码| 一区二区三区四区精品| 国产精品va无码一区二区| 麻豆AV无码精品一区二区 |