我正在InboxSDK上构建一个实用程序库,它会在您的电子邮件末尾插入文本(但在签名之前)。 InboxSDK为消息体提供HTML元素,我正在尝试使用一些Jquery来放置文本。在它变得复杂的地方,用户可能具有的不同“签名类型”。我把它们分成3个。
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 执行此操作的方式是什么?
答案 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的链接:
答案 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;)更快但您可以使用任一方法访问该元素。