Jquery - 在gmail签名之前插入文本

时间:2017-05-01 16:04:43

标签: javascript jquery html gmail

我正在InboxSDK上构建一个实用程序库,它会在您的电子邮件末尾插入文本(但在签名之前)。 InboxSDK为消息体提供HTML元素,我正在尝试使用一些Jquery来放置文本。在它变得复杂的地方,用户可能具有的不同“签名类型”。我把它们分成3个。

  1. 无签名
  2. ' - '签名
  3. 不' - '签名
  4. 2和3是困难的。这两种情况都是HTML。

    2

    <div id=":nv" class="Am Al editable LW-avf" hidefocus="true" aria-label="Message Body" g_editable="true" role="textbox" contenteditable="true" tabindex="1" style="direction: ltr; min-height: 309px;">
        <br clear="all">
        <div>
            <!--
                <div>
                  Injected Text
                </div>
            -->
            <br>
        </div>--
        <br>
        <div class="gmail_signature" data-smartmail="gmail_signature">
            <!-- Signature Content -->
        </div>
    </div>
    

    3

    <div id=":nv" class="Am Al editable LW-avf" hidefocus="true" aria-label="Message Body" g_editable="true" role="textbox" contenteditable="true" tabindex="1" style="direction: ltr; min-height: 309px;">
    <br clear="all">
    <div>
        <!--
            <div>
              Injected Text
            </div>
        -->
        <div class="gmail_signature" data-smartmail="gmail_signature">
            <!-- Signature Content -->
        </div>
    </div>
    

    当' - '存在时,我希望我注入的新文本<div>放在第一个子div中。如果它不存在,我希望它作为消息正文的直接子节点,签名前的一个div。

    最优雅, jquer-ish 执行此操作的方式是什么?

    Gmail Signature Options

3 个答案:

答案 0 :(得分:1)

好的,我想我明白了。

var insertDiv = $(`<div>${text}</div>`);
var emailBody = window.gmailComposer.getBodyElement();

if( $('[data-smartmail="gmail_signature"]').length > 0 ) { //if there is indeed a signature block.
  if ( $(emailBody).children().has('[data-smartmail="gmail_signature"]').length == 0 ) { //if we have 'double dash' mode enabled.
    insertDiv.insertAfter($('[aria-label="Message Body"] > div:not(\'[data-smartmail="gmail_signature"]\'):last'), emailBody); //insert the text in the last div before the "--" div
  } else { //'double dash' mode disabled
    insertDiv.insertBefore($('[data-smartmail="gmail_signature"]'), emailBody); //insert the text before the signature
  }
} else { //no signature
  $(emailBody).append(insertDiv); //insert the text at the end of the email
}

答案 1 :(得分:0)

您是否曾尝试使用jQuery prepend()作为第一个子项追加,而before()/insertBefore()是否要在元素之前添加?

此处指向doc的链接:

http://api.jquery.com/prepend/

http://api.jquery.com/before/

答案 2 :(得分:0)

var foo = $(document.getElementById(":nv")).children("br:first").next();
var divToAdd = $("<div></div>").text("Injected Div");

foo.prepend(divToAdd);

这应该有效。需要注意的一点是 $(document.getElementById(&#34;:nv&#34;)) $(&#34; \\:nv&#34;)更快但您可以使用任一方法访问该元素。