2011-05-30 68 views
3

有沒有辦法用jQuery或JavaScript捕獲字值?在例如:jquery捕獲字值

搜索:五月

當我點擊本月行情「搜索」或「行情」或任何字,我提醒這個詞的文字?

更新:

這就是我的意思:

http://jsfiddle.net/BE68L/

有沒有一種方法,我可以得到文本值不包成一些HTML元素?

+3

你的問題沒有意義。說明你的目標的代碼示例肯定會使這個更清晰。您也可以使用http://jsfiddle.net來播放和發佈HTML/CSS/javascript片段。 – 2011-05-30 21:47:52

+0

雙擊單詞以提醒您單擊的單詞的文本? – 2011-05-30 21:48:50

+0

類似於http://stackoverflow.com/questions/396649/retrieving-dom-textnode-position? – Niklas 2011-05-30 21:49:28

回答

1

要查找較長段落中的特定單詞,您必須創建Range objectsTextRange's以查找段落中特定單詞的座標。一旦爲每個單詞映射了座標,就可以將窗口單擊事件座標與範圍內的單詞相匹配。

Retrieving DOM textnode position的問題與您所追求的內容有些相似之處。

總之,我認爲應該完全可以準確地得到被點擊的單詞,即使在更長的段落中,但它肯定不是很容易,對於較長的文本片段,它可能最終非常低效。爲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','forward','character'); 
     alert(b+a); 

    }); 
}); 

例如: http://jsfiddle.net/niklasvh/rD2uE/

它不能在IE <的工作,雖然= 8,你會可能需要使用IE選擇做不同的解決方案。

1

如果不將它包裝在HTML節點中,您無法做到這一點。 您可以將一些Javascript魔術應用於「解包文本」,這基本上意味着Textnode。這可能是這樣的:

$('#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/

我只是寫下來。還有很多優化潛力,但它應該給你一個關於如何實現它的基本想法。

+0

你**可以**做到這一點,而不用包裝它在HTML節點。檢查我的答案。 – Niklas 2011-05-30 22:23:18

+0

@jAndy沒有在我的頁面中呈現,但我在源代碼中看到它。如果我刪除'$('#foo')。empty()。append(nodelist); '點擊的東西不起作用,也許是因爲我有
元素 – London 2011-05-30 22:42:10

+0

@尼克拉斯:好吧,我可能在我的第一句話有點快。 @倫敦:你實際使用哪種瀏覽器?我的代碼使用es5功能,因此需要一個「new'ish」瀏覽器。 – jAndy 2011-05-30 22:52:52