问题描述
|
有没有办法用jquery或javascript捕获单词值?在示例中:
搜索:5月份的行情
当我单击\“搜索:\”或\“行情\”或任何单词时,是否提示该单词文字?
更新:
这就是我的意思:
http://jsfiddle.net/BE68L/
有没有一种方法可以获取文本值而无需将其包装到某些html元素中?
解决方法
如果不将其包装在HTML节点中,则无法执行此操作。您可以将一些Javascript魔术应用于\“ unwrapped text \”,这基本上意味着a0。可能看起来像:
$(\'#foo\').contents().each(function(_,node) {
var nodelist = node.textContent.split(/\\s/).map(function( word ) {
return $(\'<span>\',{
text: word + \' \',click: function() {
alert( $(this).text() );
}
}).get(0);
});
$(\'#foo\').empty().append(nodelist);
});
演示:http://jsfiddle.net/LFCWp/
我只是写下来。仍有大量的优化潜力,但它应该使您基本了解如何实现这一目标。
, 要在较长的段落中查找特定的单词,您必须创建Range对象和TextRange \才能在段落中找到特定单词的坐标。映射每个单词的坐标后,即可将窗口单击事件坐标与该范围内的单词匹配。
检索DOM textnode位置时的问题与您所追求的类似。
简而言之,我认为即使在较长的段落中,准确地获得被单击的单词也应该是完全可行的,但这当然不是很容易,而且对于较长的文本而言,它最终可能会非常低效。
对于mozilla / webkit浏览器进行编辑,您可以这样操作:
$(document).ready(function() {
$(\"body\").click(function(){
var s = window.getSelection();
s.modify(\'extend\',\'backward\',\'word\');
var b = s.toString();
s.modify(\'extend\',\'forward\',\'word\');
var a = s.toString();
s.modify(\'move\',\'character\');
alert(b+a);
});
});
例:
http://jsfiddle.net/niklasvh/rD2uE/
但是,它在IE <= 8上不起作用,您可能需要使用IE选择项来做另一种解决方案。