Thank you so much bibby for trying to answer my question so thoroughly. My call for help was in fact dictated by lack of time. I thought the solution was somehow going to be obvious, but now it see I was totally wrong.
On 27 sep, 16:47, bibby <li...@bbby.org> wrote: > Hi rossenbere, > There's something about "text" that you should be aware of; text is > rendered as tree nodes just like other elements, the difference being > that they are unique types. ( elm.nodeType == 1 == DOM Element , > elm.nodeType == 3 == TextNode ). > > In the example, "a div with 2 paragraphs. Each paragraph has text", > it might be common to think of the tree having 3 nodes, div, p, p. > But the truth is that there are 5, because each paragraph has a child > node of a TextNode type. Browsers need this to parse things out. > > Here's why this is important. > What you're proposing to do (which is by no means crazy or not- > doable ) is to tag one of the words within the text node and create a > behavior for it. Selection is certainly going to be the hard part > here, and that's because the only selectable element is the entire > text node. This is going to have to be broken up. > > If there is a <p> , and that p contains "foo bar baz" ; there is > one p with 1 child text node. > To mark up a <p>, and that p contained "foo <span>bar</span> baz" ; > now it has 3 child nodes, 1 of them a DOM node, and the other 2 text > nodes. > > So your initial operation should be performed on the paragraph. > Get it's .html() ( not .text() just to be tag-safe ), and .split() > using a RegExp matching the word or words you wish to tag. The > resulting array would be everything but those words. For the spaces > in between, create a tag (span would do) with a className you can find > later. $("<span/>).addClass('dict_word').text(word); > > Clear the contents of the paragraph and begin rebuilding it a piece at > a time : TextNode[0] , span.dict_word, TextNode[1], span.dict_word. > > I started a small program as a proof of this using two words to tag, > but I ran into some problems, so keep these issues in mind. > When it came time to insert a new span tag, I wasn't entirely sure if > I was supposed to have the first word or the second from my split > list. It also wasn't clear to me if a tagged word should have been the > first or last word in a paragraph. > > I will share, at least, the first part where I identify which > paragraphs need work: > $(document).ready(function() > { > var words = ['ipsum', 'aptent']; > var pattern = '('+words.join('|')+'); > var regex = new RegExp( pattern , 'i' ); > > $('p') > .filter(function() > { > return regex.test( $(this).text() ); > }) > .each(function() > { > // do stuff > }); > > }); > > Ideally, in the end, you'd be able to dict_ize the words by className > > $('.dict_word').each( Dictionary.link ); > ( assuming Dictionary.link is a method that does the business ) > > Hope this helps > > On Sep 27, 9:52 am, rossenbere <hubert.ca...@telenet.be> wrote: > > > > > Hi > > > I'm a newbie. > > I just don't know how to construct the jquery selector syntax to pick > > up a single word on click from within let's say a <p> element and then > > trigger some function in which the selected word is going to be used. > > (Something like when you click a word on an HTML page and get the > > meaning of that word from a dictionary-program - e.g. the COED Concise > > Oxford English Dictionary). > > I'd be glad if someone could help me out on this.