如何在javascript中获取所选单词的左侧单词

时间:2014-11-11 06:35:32

标签: html html5 css3 javascript

作为我们的例子

姓名:Abdul Naeem

如果我们从上面选择Naeem以便从中获取Abdul .......

是否可以获取所选单词的左侧单词

我试过但我还没有找到这个.....可以任何身体帮助我摆脱这个问题。

我发现了一些提示,它只能获取所选单词,但我需要左侧的单词

Get the Highlighted/Selected text

例如,让我们考虑一个物体是否重30 N.现在我想选择30,并从中得到重量?我怎么能在javascript中完成 -

6 个答案:

答案 0 :(得分:0)

这是非常重要的,主要是因为文档的层次性。

在非IE浏览器中,只要它位于同一元素中,就会为您提供前一个单词的限制功能:

// get the selection
var sel = window.getSelection();
// get the element in which the selection is made, and the start and end position
var node = sel.anchorNode;
var from = sel.anchorOffset;
// let's see what's before the selection
var textBeforeWord = node.textContent.substring(0, from);
var match = textBeforeWord.match(/(\w+)\s+/);
var previousWord = match[1];

当你考虑一个单词可能是其元素中的第一个东西,或者选择可能跨元素时,当你需要导航DOM层次结构以寻找前一个元素时,这会变得复杂得多。事实上,你需要做两次完全不同的事情(因为IE的API完全不同),这也很复杂。

编辑如果是<textarea>元素,它会变得更简单,因为您无需担心选择溢出元素。对于IE,你必须做一些体操,因为它不支持selectionStart,如here所述。

var node = document.getElementById('mytextarea');
var from = node.selectionStart;
var textBeforeWord = node.textContent.substring(0, from);
// the rest is the same as above

答案 1 :(得分:0)

首先假设这些:

  

textbox中的所有文字= Abdul Naeem

     

目前选择的文字= ul Naeem

     

目前未选中的文字= Ab

现在,从你的问题来看,你只想得到正确的未选文本,在这种情况下是Ab?然后像这样制作三个变量:

var allText = ... // get it from your textbox value
var selectedText = ... // try to get it using your link location
var unselectedText = allText.replace(selectedText, '');

然后你得到unselectedText。谢谢&amp;问候。

答案 2 :(得分:0)

注意刚刚在** CHROME 中测试过,它会显示左边所有单词“SELECTED”Word

您需要根据需要稍微修改一下,只需尝试

//console.log(window.getSelection().focusNode.data);

var textSelected = window.getSelection().toString();

var fulltext = window.getSelection().focusNode.data;

console.log(fulltext.substr(0,fulltext.length-textSelected.length));

答案 3 :(得分:0)

我发现这个问题非常有趣,因此我尝试在Javascript的帮助下完成。我不会称它为一个好的代码,但它做了你需要的阿卜杜勒。为您提供整个代码以及html页面。您将收到大量警报消息,以帮助您调试和理解我的代码。我修改了现有代码,请忽略与您无关的内容。 执行测试只需要名称字段。如果您需要澄清,请告诉我。

在测试时,请选择文字,这样就不会选择空格以及单词,这通常在双击选择时发生。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script>
function getPreviousWord()
{
    alert("inside getPreviousWord");
    var sel = window.getSelection().toString();
    alert("selected word is: "+ sel);
    var x=document.getElementById("1111");
    alert("x= " +x);
    var currentTag=x.tagName;
    alert("Current tagname is: "+currentTag);
    currentTag=currentTag.toLowerCase();
    alert("Current tagname (lowered) is: "+currentTag);
    var completeList=document.getElementsByTagName(currentTag); 
    var converted=completeList.toString();
    alert("complete List is: "+completeList);
    alert ("coneverted = "+converted);
    var cur=0;
    var next=0;
    var i=0;
    var word1="";
    var word2="";
    var j=0;
    var found= false;
    for(i=0;i<completeList.length;i++)
        {
        var temp=completeList[i].value.toString()+" ";
        alert("temp= "+temp);
        for(j=0;j<temp.length;j++)
        {
        if(temp.substring(j,j+1)==" ")
            {   
                alert("Blank space found");
                next=j;
                alert("next= "+j);
                word1=word2;
                word2=temp.substring(cur,next);
                alert("word1= "+word1 +" and word2= "+ word2);
                cur=j+1;
                if(word2==sel)
                    {
                    alert("previous word is: "+ word1);
                    found= true;
                    break;
                    }
                else
                    {
                    alert("sel!=temp");
                    }

                }

        }
        if(found==true)
            {
            alert("Breaking outer loop");
            break;
            }

        }
}

</script>
<title>Hello World</title>
</head>
<body bgcolor="beige">
   <h1>Employee Details</h1>

<form  action="hello" name="frm" onSubmit="return validate()">

      <label>Please enter your name</label><br/>

    <input type="text" name="name" id="1111" onselect="getPreviousWord()"/><font size="4" color="red"> <div id="error"> </div></font>
       <br/>
      <label id="abc">Employee ID:</label><br/>
       <input type="text" name="empId"/><br/>

       <label>Email Id:</label><br/>
       <input type="text" name="email">
       <br/>
       <label>Phone Number:</label><br/>
       <input type="text" name="phone">
       <br/>
       <br/>

       <br/>
       <input type= "button" value="Check" onclick="return validate()">
      <input type="submit" value="Submit"/>

      <s:fielderror>
        <s:param> name</s:param>
       </s:fielderror>
   </form>
</body>
</html>

答案 4 :(得分:-1)

<!DOCTYPE html>
<html>
<body>

<p>Click the button to display the array values after the split.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {
    var str = "Abdul Naeem";
    var res = str.split(" ");
    for(i=0;i<res.length;i++)
    {

    alert(res[i]);
    }
    //document.getElementById("demo").innerHTML = res;
}
</script>

</body>
</html>

答案 5 :(得分:-1)

使用Jquery在JS中试试这个:

var a="Name : Abdul Naeem";
var sp="Naeem";
$(function(){
var x=a.split(sp);
    z=x[0].split(" ");
    alert(z[z.length-2]);
});

Demo in JSFIDDLE