I'm new to Javascript and would like to modify a text string by clicking on individual characters. The string is: 0000 0000 0000 0000
representing a binary number. I would like to be able to toggle a 0
to a 1
by clicking directly on the text.
I have tried to use onclick() but have only managed to detect a click for the entire paragraph. What would be an appropriate method to detect which character is clicked?
You'd need to add a container round each character, preferably an inline
div
or aspan
. This question has an excellent example on adding wrapper to each character:JavaScript regular expression: inserting span tag for each character
For such a small number of characters, the easiest way is to put each of them in its own span:
I'd also put all of those in a container, and hook the
click
event on the container rather than on the individual spans, so:Then hook it up:
In your click handler, use
event.target
to find out which span was clicked:More to explore:
As you can see above, I had to work around the fact that some browsers use the standard
addEventListener
, and others (IE8 and earlier) useattachEvent
. I recommend using a good JavaScript library like jQuery, Prototype, YUI, Closure, or any of several others. They smooth over those kinds of browser inconsistencies for you, and add a lot of very useful utility functionality so you can focus just on what you're trying to do.For example, that handler code written using jQuery:
Maybe you can may be use coordinates of mouse when detect click: window.event.clientX and window.event.clientY gives you the X and Y coordinates of the mouse position.
and then you check the coordinates to fix the clicked text
You can't assign event to single character in text.
You would have to assign click handler to node holding the text, and then check caret position to determine yourself which of the character has been clicked.
One of other possible solutions could be splitting text
0000 0000 0000 0000
, so that every character is wrapped inspan
element for example. Then you can bind click handler to those spans and easily determine which character has been clicked because click event will be fired for one, specific character.you would need to make each character addressable to the dom (by wrapping it in a span, for example).
say you've got this HTML
you need to
var $node = $('.binary'), text = $node.text();
text = $.trim(text); var characters = text.split('');
text = '<span>' + characters.join('</span><span>') + '</span>';
$node.html(text)
;$node.on('click', 'span', function(e){ /* handle */ });
your handle could look like
putting things together:
Put each 0 into a span and register an eventhandler on the whole paragraph, in order to use delegation. Use Event.target property to change the text of the span you clicked on in the event handler.