将文本从 div innerHtml 复制到 textarea
Copy text from div innerHtml to textarea
与 iframe 问题相关的问题:
我正在尝试将 InnerHtml 从 div 复制到 TextArea。
我在同一个网页上制作了两个 google 翻译器实例,我正在尝试将第一个实例的 auto-correction 应用到第二个实例,而不更改第一个 textarea
。
我尝试了不同的代码:
setInterval(function() {
childAnchors1 = document.querySelectorAll("#spelling-correction > a")[0];
$("#source")[1].val(childAnchors1.text());
}, 100);
setInterval(function copyText() {
$(".goog-textarea short_text")[1].val($("#spelling-correction > a")[0].innerText());
}
, 100);
setInterval(function copyText() {
$("#source")[1].val($("#spelling-correction > a")[0].innertext());
}
, 100);
setInterval(function() {
var finalarea = document.getElementsByClassName("goog-textarea short_text")[1];
var correction = document.querySelectorAll("#spelling-correction > a")[0].innerHTML
document.getElementsByClassName("goog-textarea short_text")[1].value = correction.innerText;
}, 100);
onclick='document.getElementsByClassName("goog-textarea short_text")[1].innerHTML=document.getElementById("spelling-correction > a")[0].innerHTML;'
但不幸的是,这些似乎都不起作用......
如有任何帮助,我将不胜感激。
我应该提到这一点。我使用 iframe 创建第二个实例,所以简单的解决方案不起作用......
这是我用于创建 iframe 实例的代码:
var makediv = document.createElement("secondinstance");
makediv.innerHTML = '<iframe id="iframenaturalID" width="1500" height="300" src="https://translate.google.com"></iframe>';
makediv.setAttribute("id", "iframeID");
var NewTranslator = document.getElementById("secondinstance");
var getRef = document.getElementById("gt-c");
var parentDiv = getRef.parentNode;
parentDiv.insertBefore(makediv, getRef);
我尝试使用它在 iframe 和父网站之间进行通信:
setInterval(function() {
var childAnchors1 = window.parent.document.querySelectorAll("#spelling-correction > a");
var TheiFrameInstance = document.getElementById("iframeID");
TheiFrameInstance.contentWindow.document.querySelectorAll("#source").value = childAnchors1.textContent;
}, 100);
但是没用...
好的,我让它工作于:
var a = document.createElement('iframe');
a.src = "https://translate.google.com";
a.id = "iframenaturalID";
a.width = "1000";
a.height = "500";
document.querySelector('body').appendChild(a)
和
let iframe = document.getElementById("iframenaturalID");
setInterval(function() {
let source = iframe.contentWindow.document.getElementById("source");
let destination = window.parent.document.querySelector("#spelling-correction > a");
source.value = destination.textContent;
}, 100);
现在它完成了我尝试做的事情,但是我仍然收到错误消息:Uncaught TypeError: Cannot set property 'value' of null
at eval
,它指向这一行:source.value = destination.textContent;
。虽然这不是什么大问题,但仍然很奇怪 returns 这个错误...
好的,我可以通过添加 setTimeout
.
来解决它
您尝试过的所有代码中的问题是如何正确获取文本。
从你的第一个例子开始,它应该使用innerText
而不是text()
,因为它是一个jquery对象,你要返回DOM 对象不是 jQuery 对象:
setInterval(function() {
childAnchors1 = document.querySelectorAll("#spelling-correction > a")[0];
$("#source")[1].val(childAnchors1.innerText);
}, 100);
在您的 第二个示例和第三个示例 中,您需要从 innerText
中删除括号,例如:
setInterval(function copyText() {
$(".goog-textarea short_text")[1].val($("#spelling-correction > a")[0].innerText);
}, 100);
我建议使用纯 js 和 textContent
属性,例如:
setInterval(function() {
var childAnchors1 = document.querySelectorAll("#spelling-correction > a")[0];
document.querySelectorAll("#source")[1].value = childAnchors1.textContent;
}, 100);
注意: 我应该指出您的 HTML 代码无效,因为当 id
属性在同一份文件。
因为 textarea
是一个表单元素,所以 .innerText
或 .innerHTML
都不起作用。您需要使用 value
属性(或 .val()
使用 JQuery)提取其内容。
仅供参考:
- 是
innerText
,不是.innertext
。
.innerText
是一个 属性,不是一个函数,所以你不要在它后面使用 ()
。
- 是
.innerHTML
,不是.innerHtml
。
innerHTML
当字符串中有HTML时使用
解析为 HTML 和 .textContent
用于不应该的字符串
被解析为 HTML。通常,您不会将 one 的内容映射到
其他
document.querySelectorAll()
扫描整个DOM找到所有
匹配节点。如果你知道你只有一个匹配节点或者你
只想要第一个匹配的节点,那是一种资源浪费。
相反,使用 .querySelector()
,它会在
找到第一个匹配项。
由于您正在使用 JQuery,因此您应该在使用上保持一致。 JQuery 不需要 .querySelector()
或 .querySelectorAll()
,只需使用 JQuery 选择器语法即可。
这是一个示例,它使用您在问题中显示的具有相同 id
值和嵌套的 HTML 类型来显示香草 JavaScript 和 JQuery 方法你展示的结构。您可以看到我使用了不同的选择器来正确定位 input/output 元素。
// Standare DOM queries to get standard DOM objects
let source = document.getElementById("source");
let destination = document.querySelector("#spelling-correction > a");
// JQuery syntax to get JQuery objects:
let jSource = $("#source");
let jDestination = $("#spelling-correction > a");
// Vanilla JavaScript way to set up the event handler and do the work
source.addEventListener("keyup", function(){
destination.textContent = source.value;
});
// JQuery way to set up the event handler and do the work
jSource.on("keyup", function(){
jDestination.text(jSource.val());
});
textarea, div {
border:3px solid grey;
width:500px;
height:75px;
font-size:1.5em;
font-family:Arial, Helvetica, sans-serif;
}
.destination { pointer-events:none; background:#e0e0e0; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Type in the first textarea</p>
<textarea id="source"></textarea>
<div id="spelling-correction">
Did you mean: <a href="#"></a>
</div>
与 iframe 问题相关的问题:
我正在尝试将 InnerHtml 从 div 复制到 TextArea。
textarea
。
我尝试了不同的代码:
setInterval(function() {
childAnchors1 = document.querySelectorAll("#spelling-correction > a")[0];
$("#source")[1].val(childAnchors1.text());
}, 100);
setInterval(function copyText() {
$(".goog-textarea short_text")[1].val($("#spelling-correction > a")[0].innerText());
}
, 100);
setInterval(function copyText() {
$("#source")[1].val($("#spelling-correction > a")[0].innertext());
}
, 100);
setInterval(function() {
var finalarea = document.getElementsByClassName("goog-textarea short_text")[1];
var correction = document.querySelectorAll("#spelling-correction > a")[0].innerHTML
document.getElementsByClassName("goog-textarea short_text")[1].value = correction.innerText;
}, 100);
onclick='document.getElementsByClassName("goog-textarea short_text")[1].innerHTML=document.getElementById("spelling-correction > a")[0].innerHTML;'
但不幸的是,这些似乎都不起作用......
如有任何帮助,我将不胜感激。
我应该提到这一点。我使用 iframe 创建第二个实例,所以简单的解决方案不起作用...... 这是我用于创建 iframe 实例的代码:
var makediv = document.createElement("secondinstance");
makediv.innerHTML = '<iframe id="iframenaturalID" width="1500" height="300" src="https://translate.google.com"></iframe>';
makediv.setAttribute("id", "iframeID");
var NewTranslator = document.getElementById("secondinstance");
var getRef = document.getElementById("gt-c");
var parentDiv = getRef.parentNode;
parentDiv.insertBefore(makediv, getRef);
我尝试使用它在 iframe 和父网站之间进行通信:
setInterval(function() {
var childAnchors1 = window.parent.document.querySelectorAll("#spelling-correction > a");
var TheiFrameInstance = document.getElementById("iframeID");
TheiFrameInstance.contentWindow.document.querySelectorAll("#source").value = childAnchors1.textContent;
}, 100);
但是没用...
好的,我让它工作于:
var a = document.createElement('iframe');
a.src = "https://translate.google.com";
a.id = "iframenaturalID";
a.width = "1000";
a.height = "500";
document.querySelector('body').appendChild(a)
和
let iframe = document.getElementById("iframenaturalID");
setInterval(function() {
let source = iframe.contentWindow.document.getElementById("source");
let destination = window.parent.document.querySelector("#spelling-correction > a");
source.value = destination.textContent;
}, 100);
现在它完成了我尝试做的事情,但是我仍然收到错误消息:Uncaught TypeError: Cannot set property 'value' of null
at eval
,它指向这一行:source.value = destination.textContent;
。虽然这不是什么大问题,但仍然很奇怪 returns 这个错误...
好的,我可以通过添加 setTimeout
.
您尝试过的所有代码中的问题是如何正确获取文本。
从你的第一个例子开始,它应该使用innerText
而不是text()
,因为它是一个jquery对象,你要返回DOM 对象不是 jQuery 对象:
setInterval(function() {
childAnchors1 = document.querySelectorAll("#spelling-correction > a")[0];
$("#source")[1].val(childAnchors1.innerText);
}, 100);
在您的 第二个示例和第三个示例 中,您需要从 innerText
中删除括号,例如:
setInterval(function copyText() {
$(".goog-textarea short_text")[1].val($("#spelling-correction > a")[0].innerText);
}, 100);
我建议使用纯 js 和 textContent
属性,例如:
setInterval(function() {
var childAnchors1 = document.querySelectorAll("#spelling-correction > a")[0];
document.querySelectorAll("#source")[1].value = childAnchors1.textContent;
}, 100);
注意: 我应该指出您的 HTML 代码无效,因为当 id
属性在同一份文件。
因为 textarea
是一个表单元素,所以 .innerText
或 .innerHTML
都不起作用。您需要使用 value
属性(或 .val()
使用 JQuery)提取其内容。
仅供参考:
- 是
innerText
,不是.innertext
。 .innerText
是一个 属性,不是一个函数,所以你不要在它后面使用()
。- 是
.innerHTML
,不是.innerHtml
。 innerHTML
当字符串中有HTML时使用 解析为 HTML 和.textContent
用于不应该的字符串 被解析为 HTML。通常,您不会将 one 的内容映射到 其他document.querySelectorAll()
扫描整个DOM找到所有 匹配节点。如果你知道你只有一个匹配节点或者你 只想要第一个匹配的节点,那是一种资源浪费。 相反,使用.querySelector()
,它会在 找到第一个匹配项。 由于您正在使用 JQuery,因此您应该在使用上保持一致。 JQuery 不需要.querySelector()
或.querySelectorAll()
,只需使用 JQuery 选择器语法即可。
这是一个示例,它使用您在问题中显示的具有相同 id
值和嵌套的 HTML 类型来显示香草 JavaScript 和 JQuery 方法你展示的结构。您可以看到我使用了不同的选择器来正确定位 input/output 元素。
// Standare DOM queries to get standard DOM objects
let source = document.getElementById("source");
let destination = document.querySelector("#spelling-correction > a");
// JQuery syntax to get JQuery objects:
let jSource = $("#source");
let jDestination = $("#spelling-correction > a");
// Vanilla JavaScript way to set up the event handler and do the work
source.addEventListener("keyup", function(){
destination.textContent = source.value;
});
// JQuery way to set up the event handler and do the work
jSource.on("keyup", function(){
jDestination.text(jSource.val());
});
textarea, div {
border:3px solid grey;
width:500px;
height:75px;
font-size:1.5em;
font-family:Arial, Helvetica, sans-serif;
}
.destination { pointer-events:none; background:#e0e0e0; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Type in the first textarea</p>
<textarea id="source"></textarea>
<div id="spelling-correction">
Did you mean: <a href="#"></a>
</div>