【发布时间】:2016-04-09 00:35:53
【问题描述】:
我想知道是否可以替换 iframe 中的某些单词。
我使用 jQuery 将 iframe 中的内容更改为相同的内容,但进行了替换。这里的问题是“光标重置”到输入字段的开头,所以你必须重新从头开始写。
这就是我所做的
<html>
<head>
<script>
function iFrameOn(){
richTextField.document.designMode = 'On';
}
</script>
</head>
<body onLoad="iFrameOn();">
<!-- Hide(but keep)your normal textarea and place in the iFrame replacement for it -->
<textarea style="display:none;" name="myTextArea" id="myTextArea" cols="100" rows="14"></textarea>
<iframe name="richTextField" id="richTextField" style="border:#000000 1px solid; width:100px; height:20px;">
</iframe>
<!--End replacing your normal textarea -->
</p>
<script>
function ReplaceWords(){
var textfield = document.getElementById("richTextField");
textfield.contentWindow.document.body.onkeyup = function(e){
var content = textfield.contentWindow.document.body.innerHTML;
var Fixed_Content = content.replace("hey", "yo");
$(document).ready(function() {
$('#richTextField').contents().find('body').html(Fixed_Content);
});
};
};
ReplaceWords();
</script>
</body>
</html>
问题是:如果您可以在不重置光标的情况下替换 iframe 中的某些内容,因为当您键入时它不会被欣赏,它只是从头开始。
更新:基本上焦点不是文本区域,它隐藏在 iframe 中,因此我使用document.designMode = 'On';。
我再次更新了帖子,从一开始就应该是这样的。
jsfiddle 的链接: https://jsfiddle.net/tqf3v2sk/8/
【问题讨论】:
-
你有一个额外的
;。在定义它之前调用Hello()。您可以使用onmouseenter事件或设置时间间隔来执行此操作。展示一个例子会很棒。 -
谢谢,但是在 mouseenter 上它不会是实时的,而写作。
-
如果我在 iframe 中理解你的意思,你会加载输入字段,当用户键入时,你会尝试替换输入文本的某些部分。如果是,那么您可以将输入字段值替换为更新的值,而不是替换 html 标签。因为所描述问题的整个文档替换原因。否则,如果标签替换正是您所需要的,您可以在内容更改后在输入字段上调用焦点方法。
-
如果我理解正确,您有一些 input/textarea/contenteditable 元素并想要修改其内容,但保持光标位置(如果光标位于被替换部分会发生什么?)。这可能与Stop cursor from jumping to end of input field in javascript replace 重复。 iframe 似乎是多余的。
-
正如@Oriol 提到的,iframe 似乎是多余的。我认为如果你能提供一个工作小提琴会更好(通过 jsfiddle 或 codepen 等网站)
标签: javascript jquery html iframe replace