我一直在高低寻找答案,但失败了.
是否有跨浏览器解决方案来替换contenteditable div中的选定文本?我只是希望用户突出显示一些文本并将突出显示的文本替换为xxxxx.
var a = 'why is this not undefined?';
function checkScope(a) {
var a;
console.log(a);
}
checkScope(a);
Run Code Online (Sandbox Code Playgroud)
Javascript是功能范围语言,对吗?当我在与函数参数使用相同名称的函数内部声明一个新变量时,为什么新定义的变量仍然保存与参数相同的数据?
我以为它应该是未定义的?
我有一个困难的情况与HTML和JavaScript.我的html页面允许用户选择文本并用颜色突出显示.现在我想将状态保存到数据库中以便稍后为该用户显示它.当然,我可以在用户编辑后保存整个html.但我只想保存一些参数,结合原始html显示状态用户上次查看的页面.我们可以使用这个功能:
var index = innerHTML.indexOf(text);
Run Code Online (Sandbox Code Playgroud)
突出显示该索引处的文本.但是如果页面中有很多相同的文本,我想要突出显示之前用户突出显示的文字.
任何人都可以通过javascript告诉我如何实现这一目标?
我非常感谢你的帮助.
我有以下非常简单的html页面:
<html>
<head>
<script type="text/javascript">
function alertSelection()
{
var selection = window.getSelection();
var txt = selection.toString();
alert(txt);
}
</script>
</head>
<body>
This is <span style="background-color:black;color:white">the</span> text.
<div style="background-color:green;width:30px;height:30px;margin:30px"
onmouseover="alertSelection()">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我选择整个第一行并将鼠标悬停在方格上时,我会收到"这是文本"的警报.
我如何解决此问题,以便不会从警报消息中删除span标记或任何其他选定的HTML?
编辑:我正在寻找如何从中获取完整的HTML window.getSelection().警报对话框就是我试图验证代码的方式.我只关心在Safari中工作.
如果我从文本区域中选择一个文本我需要知道选择了哪个文本,例如"hello world"如果我选择你好我想看看你好如何选择如何在jquery中执行此操作.我想让它变得大胆.
<textarea id="editor" cols="80" rows="20">
Hello world, This is Me!
</textarea>
<button onclick="SelectText()">
Bold
</button>
Run Code Online (Sandbox Code Playgroud) 我想在用户选择文档中的文本确定的位置插入一个元素(span,div等).
我能够得到选择的元素.但是我无法确定选择的确切位置.
例如:
<span>this is testing string for testing purpose</span>
Run Code Online (Sandbox Code Playgroud)
在此,我们假设用户选择了第二个'测试'字样.我希望它被替换为
<span>this is testing string for <b>testing</b> purpose</span>
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
顺便说一句:我知道这是可能的.谷歌浪潮做到了.我只是不知道该怎么做
如何检测用户选择(用鼠标突出显示)是否在某个元素的子元素之内?
例:
<div id="parent">
sdfsdf
<div id="container">
some
<span>content</span>
</div>
sdfsd
</div>
Run Code Online (Sandbox Code Playgroud)
伪代码:
if window.getSelection().getRangeAt(0) is a child of #container
return true;
else
return false;
Run Code Online (Sandbox Code Playgroud) 我编写了一个代码来检测使用javascript的选择结束,并在最终位置放置一个标记.看到这个jsfiddle:http://jsfiddle.net/vCwwN/
上面的代码执行以下操作:
getClientRects查找所有选择矩形边界,以及用于检测选择方向的黑客(如果向后或不向后).根据这两个信息,它将标记放在末尾.您可以尝试选择上面描述的英文脚本,没有任何问题.唯一的问题是,当你试图处理RTL脚本(如阿拉伯语),则该标记显示在所选择的RTL脚本的开始,而不是结束(其中鼠标/键盘实际上停止).这些导致问题:
基本上,从任何地方开始的选择(LTR或RTL)和以RTL脚本结束是不正确的.任何其他情况都得到了正确处理(例如,从LTR或RTL开始,以LTR结束,甚至在途中通过RTL脚本).
问题是RTL脚本的流向是翻转的,因此向后是向前,向前是向后.这就是为什么我的代码无法正确处理RTL并且后向黑客被逆转的原因.
我想到的一个解决方案是检测选择的最后一个字符,看看它是否有RTL脚本,然后根据这个翻转后退标志.我已经放置了一个函数来检测文本是否以RTL字符结尾(它与未使用的jsfiddle相同).它可能会帮助你,帮我解决它:)