<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn"><generator uri="https://gohugo.io/" version="0.147.7">Hugo</generator><title type="html">有呀</title><link href="https://nuoea.com/tags/%E6%8A%98%E8%85%BE/" rel="alternate" type="text/html" title="html"/><link href="https://nuoea.com/tags/%E6%8A%98%E8%85%BE/index.xml" rel="alternate" type="application/rss+xml" title="rss"/><updated>2026-07-07T04:03:54+00:00</updated><id>https://nuoea.com/tags/%E6%8A%98%E8%85%BE/</id><entry><title type="html">给Memos页面增加编辑、归档及删除功能</title><link href="https://nuoea.com/memos-add-edit-and-archive/" rel="alternate" type="text/html"/><id>https://nuoea.com/memos-add-edit-and-archive/</id><published>2023-07-19T14:44:15+08:00</published><updated>2023-07-19T14:44:15+08:00</updated><content type="html"><![CDATA[<h2 id="更新">更新</h2>
<ul>
<li>2023-07-19 新增删除功能；</li>
</ul>
<h2 id="前言">前言</h2>
<p>书接上回，继续完善<code>Memos</code>页面。这次给页面增加<code>编辑</code>和<code>归档</code>功能，让我们的<code>Memos</code>页面使用起来更加的方便。</p>
<h2 id="说明">说明</h2>
<p>值得一提的是，两个功能都需要Memos发布框的支持。还没有折腾的同学看这里：<a href="https://nuoea.com/add-memos-editor/"> Memos页面添加发布框 </a></p>
<h2 id="编辑">编辑</h2>
<ul>
<li>首先，给你的每一条Memos 增加一个按钮，并绑定一个点击事件:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">button</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;edit-btn&#34;</span> <span style="color:#a6e22e">onclick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;editMemo(&#39;+JSON.stringify(data[i]).replace(/&#34;</span><span style="color:#960050;background-color:#1e0010">/</span><span style="color:#a6e22e">g</span><span style="color:#960050;background-color:#1e0010">,</span> <span style="color:#960050;background-color:#1e0010">&#39;&amp;</span><span style="color:#a6e22e">quot</span><span style="color:#960050;background-color:#1e0010">;&#39;)+&#39;)&#34;</span>&gt;编辑&lt;/<span style="color:#f92672">button</span>&gt;
</span></span></code></pre></div><ul>
<li>添加点击事件</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">editMemo</span>(<span style="color:#a6e22e">e</span>) {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memoContent</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">content</span>,<span style="color:#a6e22e">memoId</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">id</span>,<span style="color:#a6e22e">memoRelationList</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">relationList</span>,<span style="color:#a6e22e">memoResourceList</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">resourceList</span>,<span style="color:#a6e22e">memoVisibility</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">visibility</span>;
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">getEditor</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-editor-display&#34;</span>),
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-access-token&#34;</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">getEditor</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;show&#34;</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">value</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memoContent</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">height</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">scrollHeight</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#39;px&#39;</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">submitMemoBtn</span>.<span style="color:#a6e22e">classList</span>.<span style="color:#a6e22e">add</span>(<span style="color:#e6db74">&#34;d-none&#34;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">editMemoDom</span>.<span style="color:#a6e22e">classList</span>.<span style="color:#a6e22e">remove</span>(<span style="color:#e6db74">&#34;d-none&#34;</span>);
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">body</span>.<span style="color:#a6e22e">scrollIntoView</span>({<span style="color:#a6e22e">behavior</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;smooth&#39;</span>});
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">editMemoBtn</span>.<span style="color:#a6e22e">addEventListener</span>(<span style="color:#e6db74">&#34;click&#34;</span>, <span style="color:#66d9ef">function</span> () {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-access-token&#34;</span>),
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memoContent</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">value</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memoResourceList</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">JSON</span>.<span style="color:#a6e22e">parse</span>(window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-resource-list&#34;</span>)) <span style="color:#f92672">?</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">JSON</span>.<span style="color:#a6e22e">parse</span>(window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-resource-list&#34;</span>)) <span style="color:#f92672">:</span> <span style="color:#a6e22e">e</span>.<span style="color:#a6e22e">resourceList</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memoVisibility</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosVisibilitySelect</span>.<span style="color:#a6e22e">value</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">TAG_REG</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">/(?&lt;=#)([^#\s!.,;:?&#34;&#39;()]+)(?= )/g</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">memosTag</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memoContent</span>.<span style="color:#a6e22e">match</span>(<span style="color:#a6e22e">TAG_REG</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">let</span> <span style="color:#a6e22e">hasContent</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memoContent</span>.<span style="color:#a6e22e">length</span> <span style="color:#f92672">!==</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">hasContent</span>) {
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memoUrl</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosPath</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;/api/v1/memo/&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">memoId</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;?openId=&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">memosOpenId</span>;
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memoBody</span> <span style="color:#f92672">=</span> {<span style="color:#a6e22e">content</span><span style="color:#f92672">:</span><span style="color:#a6e22e">memoContent</span>,<span style="color:#a6e22e">id</span><span style="color:#f92672">:</span><span style="color:#a6e22e">memoId</span>,<span style="color:#a6e22e">relationList</span><span style="color:#f92672">:</span><span style="color:#a6e22e">memoRelationList</span>,<span style="color:#a6e22e">resourceList</span><span style="color:#f92672">:</span><span style="color:#a6e22e">memoResourceList</span>,<span style="color:#a6e22e">visibility</span><span style="color:#f92672">:</span><span style="color:#a6e22e">memoVisibility</span>}
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">fetch</span>(<span style="color:#a6e22e">memoUrl</span>, {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">method</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;PATCH&#39;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">body</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">JSON</span>.<span style="color:#a6e22e">stringify</span>(<span style="color:#a6e22e">memoBody</span>),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">headers</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>          <span style="color:#e6db74">&#39;Content-Type&#39;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;application/json&#39;</span>
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>      }).<span style="color:#a6e22e">then</span>(<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">res</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">res</span>.<span style="color:#a6e22e">status</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">200</span>) {
</span></span><span style="display:flex;"><span>          <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">memosTag</span> <span style="color:#f92672">!==</span> <span style="color:#66d9ef">null</span>) {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">memoTagUrl</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosPath</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;/api/v1/tag?openId=&#34;</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">memosOpenId</span>;
</span></span><span style="display:flex;"><span>            (<span style="color:#66d9ef">async</span> () =&gt; {
</span></span><span style="display:flex;"><span>              <span style="color:#66d9ef">for</span> <span style="color:#66d9ef">await</span> (<span style="color:#66d9ef">const</span> <span style="color:#a6e22e">i</span> <span style="color:#66d9ef">of</span> <span style="color:#a6e22e">memosTag</span>) {
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">response</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">fetch</span>(<span style="color:#a6e22e">memoTagUrl</span>, {
</span></span><span style="display:flex;"><span>                  <span style="color:#a6e22e">method</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;POST&#39;</span>,
</span></span><span style="display:flex;"><span>                  <span style="color:#a6e22e">headers</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>                    <span style="color:#e6db74">&#39;Content-Type&#39;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;application/json&#39;</span>
</span></span><span style="display:flex;"><span>                  },
</span></span><span style="display:flex;"><span>                  <span style="color:#a6e22e">body</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">JSON</span>.<span style="color:#a6e22e">stringify</span>({
</span></span><span style="display:flex;"><span>                    <span style="color:#a6e22e">name</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">i</span>
</span></span><span style="display:flex;"><span>                  })
</span></span><span style="display:flex;"><span>                });
</span></span><span style="display:flex;"><span>              }
</span></span><span style="display:flex;"><span>            })();
</span></span><span style="display:flex;"><span>          }
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">cocoMessage</span>.<span style="color:#a6e22e">success</span>(
</span></span><span style="display:flex;"><span>          <span style="color:#e6db74">&#39;保存成功&#39;</span>,
</span></span><span style="display:flex;"><span>          ()=&gt;{
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">submitMemoBtn</span>.<span style="color:#a6e22e">classList</span>.<span style="color:#a6e22e">remove</span>(<span style="color:#e6db74">&#34;d-none&#34;</span>);
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">editMemoDom</span>.<span style="color:#a6e22e">classList</span>.<span style="color:#a6e22e">add</span>(<span style="color:#e6db74">&#34;d-none&#34;</span>);
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">location</span>.<span style="color:#a6e22e">reload</span>();
</span></span><span style="display:flex;"><span>          })
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>      })
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>  })
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">cancelEditBtn</span>.<span style="color:#a6e22e">addEventListener</span>(<span style="color:#e6db74">&#34;click&#34;</span>, <span style="color:#66d9ef">function</span> () {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#a6e22e">editMemoDom</span>.<span style="color:#a6e22e">classList</span>.<span style="color:#a6e22e">contains</span>(<span style="color:#e6db74">&#34;d-none&#34;</span>)) {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">value</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;&#39;</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">height</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;inherit&#39;</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">editMemoDom</span>.<span style="color:#a6e22e">classList</span>.<span style="color:#a6e22e">add</span>(<span style="color:#e6db74">&#34;d-none&#34;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">submitMemoBtn</span>.<span style="color:#a6e22e">classList</span>.<span style="color:#a6e22e">remove</span>(<span style="color:#e6db74">&#34;d-none&#34;</span>);
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>})
</span></span></code></pre></div><h2 id="归档">归档</h2>
<ul>
<li>首先，还是给你的每一条Memos 增加一个按钮，并绑定一个点击事件:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">button</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;archive-btn&#34;</span> <span style="color:#a6e22e">onclick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;archiveMemo(\&#39;&#39;+data[i].id+&#39;\&#39;)&#34;</span>&gt;归档&lt;/<span style="color:#f92672">button</span>&gt;
</span></span></code></pre></div><ul>
<li>然后，添加点击事件</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">archiveMemo</span>(<span style="color:#a6e22e">memoId</span>) { <span style="color:#75715e">//获取Memos的ID值
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-access-token&#34;</span>); <span style="color:#75715e">//登录信息
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">memoId</span>){ <span style="color:#75715e">//判断是否登录以及获取到Memos的ID值
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memoUrl</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosPath</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;/api/v1/memo/&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">memoId</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;?openId=&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">memosOpenId</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memoBody</span> <span style="color:#f92672">=</span> {<span style="color:#a6e22e">id</span><span style="color:#f92672">:</span><span style="color:#a6e22e">memoId</span>,<span style="color:#a6e22e">rowStatus</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;ARCHIVED&#34;</span>};
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fetch</span>(<span style="color:#a6e22e">memoUrl</span>, {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">method</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;PATCH&#39;</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">body</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">JSON</span>.<span style="color:#a6e22e">stringify</span>(<span style="color:#a6e22e">memoBody</span>),
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">headers</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#39;Content-Type&#39;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;application/json&#39;</span>
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    }).<span style="color:#a6e22e">then</span>(<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">res</span>) {
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">res</span>.<span style="color:#a6e22e">status</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">200</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">cocoMessage</span>.<span style="color:#a6e22e">success</span>(
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#39;归档成功&#39;</span>,
</span></span><span style="display:flex;"><span>        ()=&gt;{
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">location</span>.<span style="color:#a6e22e">reload</span>();
</span></span><span style="display:flex;"><span>        })
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    })
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="删除">删除</h2>
<ul>
<li>首先，还是给你的每一条Memos 增加一个按钮，并绑定一个点击事件:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">button</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;delete-btn&#34;</span> <span style="color:#a6e22e">onclick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;deleteMemo(\&#39;&#39;+data[i].id+&#39;\&#39;)&#34;</span>&gt;删除&lt;/<span style="color:#f92672">button</span>&gt;
</span></span></code></pre></div><ul>
<li>然后，添加点击事件</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">deleteMemo</span>(<span style="color:#a6e22e">memoId</span>) {
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-access-token&#34;</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">memoId</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memoUrl</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosPath</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;/api/v1/memo/&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">memoId</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#34;?openId=&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">memosOpenId</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fetch</span>(<span style="color:#a6e22e">memoUrl</span>, {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">method</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;DELETE&#39;</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">headers</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#39;Content-Type&#39;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;application/json&#39;</span>
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    }).<span style="color:#a6e22e">then</span>(<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">res</span>) {
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">res</span>.<span style="color:#a6e22e">status</span> <span style="color:#f92672">==</span> <span style="color:#ae81ff">200</span>) {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">cocoMessage</span>.<span style="color:#a6e22e">success</span>(
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#39;删除成功&#39;</span>,
</span></span><span style="display:flex;"><span>        ()=&gt;{
</span></span><span style="display:flex;"><span>          <span style="color:#a6e22e">location</span>.<span style="color:#a6e22e">reload</span>();
</span></span><span style="display:flex;"><span>        })
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    }).<span style="color:#66d9ef">catch</span>(<span style="color:#a6e22e">err</span> =&gt; {
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">cocoMessage</span>.<span style="color:#a6e22e">error</span>(<span style="color:#e6db74">&#39;出错了，再检查一下吧&#39;</span>)
</span></span><span style="display:flex;"><span>    })
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content><category scheme="https://nuoea.com/categories/%E6%8A%98%E8%85%BE" term="%E6%8A%98%E8%85%BE" label="折腾"/><category scheme="https://nuoea.com/tags/memos" term="memos" label="Memos"/><category scheme="https://nuoea.com/tags/%E6%8A%98%E8%85%BE" term="%E6%8A%98%E8%85%BE" label="折腾"/></entry><entry><title type="html">开始连接，给Memos页面增加转发功能</title><link href="https://nuoea.com/memos-link-owner/" rel="alternate" type="text/html"/><id>https://nuoea.com/memos-link-owner/</id><published>2023-07-06T20:30:23+08:00</published><updated>2023-07-06T20:30:23+08:00</updated><content type="html"><![CDATA[<h2 id="前言">前言</h2>
<p>其实这个想法来自于 <a href="https://dongjunke.cn/">@小饿</a> 同学。在Memos页面拥有了发布框之后，我也一直在想，除了方便快捷之外，怎么可以让发布框更好用。转发功能的概念，让我眼前一亮。</p>
<blockquote>
<p>小饿： 转发功能，其实就是复制好友说说再评论，就更加接近微博了，信息连接效率会指数级提升。</p></blockquote>
<p>Memos诞生很长时间以来，很多人都是当个笔记应用，记录生活。后来因为[@林木木] 开始折腾。有了各种API，开始出现单独的Memos页面，也有了浏览器插件，各种手机APP。生态圈一下子就建立起来了。再到后来，木木兄为Memos开发了广场页面，尽可能多的将大家的信息聚合起来，自此，Memos开启了社交时代。</p>
<p>木木的<a href="https://immmmm.com/bbs/">「广场」</a>页面，其实已经非常趋近于微博。发布框加上后，功能已经非常完整了。所以当你拥有了一个Memos广场页面，并且加上了发布框。这个转发的功能，也可以折腾起来了。</p>
<p><img class="lozad" data-src="https://i.nuoea.com/img/2023/07/06/1688646868.jpg" alt=""  /></p>
<h2 id="部署">部署</h2>
<ul>
<li>首先，给你的每一条Memos 增加一个转发按钮，并绑定一个点击事件。</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">onclick</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;transPond(&#39;+JSON.stringify(memosForm)+&#39;)&#34;</span>&gt;&lt;/<span style="color:#f92672">a</span>&gt;
</span></span></code></pre></div><ul>
<li>然后，定义转发的内容。</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">let</span> <span style="color:#a6e22e">memosForm</span> <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">creatorName</span><span style="color:#f92672">:</span><span style="color:#a6e22e">creatorName</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">content</span><span style="color:#f92672">:</span><span style="color:#a6e22e">transData</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">url</span><span style="color:#f92672">:</span><span style="color:#a6e22e">memosLink</span>
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div><ul>
<li>再然后，需要找到你页面中的发布框以及当前登录信息。</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-access-token&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memosPath</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-access-path&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">getEditor</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-editor-display&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memosTextarea</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#34;.memos-editor-textarea&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memosVisibilitySelect</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#34;.select-memos-value&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">submitMemoBtn</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#34;.submit-memos-btn&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">editMemoDom</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#34;.edit-memos&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">editMemoBtn</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#34;.edit-memos-btn&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">cancelEditBtn</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#34;.cancel-edit-btn&#34;</span>);
</span></span></code></pre></div><ul>
<li>最后，给发布框中，添加转发内容。</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">transRes</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;[@&#39;</span><span style="color:#f92672">+</span> <span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">creatorName</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#39;](&#39;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">url</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#39;) \n\n&gt; &#39;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">creatorName</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#39;: &#39;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">content</span>;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">value</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">transRes</span>;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">height</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">scrollHeight</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#39;px&#39;</span>;
</span></span><span style="display:flex;"><span>document.<span style="color:#a6e22e">body</span>.<span style="color:#a6e22e">scrollIntoView</span>({<span style="color:#a6e22e">behavior</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;smooth&#39;</span>})
</span></span></code></pre></div><p>完整点击事件代码如下：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#75715e">//转发
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">transPond</span>(<span style="color:#a6e22e">a</span>){
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">memosTextarea</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#34;.memos-editor-textarea&#34;</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">getEditor</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-editor-display&#34;</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">=</span> window.<span style="color:#a6e22e">localStorage</span> <span style="color:#f92672">&amp;&amp;</span> window.<span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#34;memos-access-token&#34;</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">memosOpenId</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">getEditor</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;show&#34;</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">transRes</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;[@&#39;</span><span style="color:#f92672">+</span> <span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">creatorName</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#39;](&#39;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">url</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#39;) \n\n&gt; &#39;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">creatorName</span><span style="color:#f92672">+</span><span style="color:#e6db74">&#39;: &#39;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">content</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">value</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">transRes</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">style</span>.<span style="color:#a6e22e">height</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">memosTextarea</span>.<span style="color:#a6e22e">scrollHeight</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#39;px&#39;</span>;
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">body</span>.<span style="color:#a6e22e">scrollIntoView</span>({<span style="color:#a6e22e">behavior</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;smooth&#39;</span>})
</span></span><span style="display:flex;"><span>  }<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>    window.<span style="color:#a6e22e">open</span>(<span style="color:#a6e22e">a</span>.<span style="color:#a6e22e">url</span>);<span style="color:#75715e">//如果没登录，则不转发直接跳转。
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="最后">最后</h2>
<p>效果如下：</p>
<p><img class="lozad" data-src="https://i.nuoea.com/img/2023/07/06/1688649915.jpg" alt=""  /></p>
<p><img class="lozad" data-src="https://i.nuoea.com/img/2023/07/06/1688649318.jpg" alt=""  /></p>]]></content><category scheme="https://nuoea.com/categories/%E6%8A%98%E8%85%BE" term="%E6%8A%98%E8%85%BE" label="折腾"/><category scheme="https://nuoea.com/tags/memos" term="memos" label="Memos"/><category scheme="https://nuoea.com/tags/%E6%8A%98%E8%85%BE" term="%E6%8A%98%E8%85%BE" label="折腾"/></entry></feed>