Reputation: 1262
Does React have an event handler for the onSelect statement? i.e. if a user selects some text with their mouse within a paragraph (highlighted text) trigger an event that extracts the selected text.
import React, { Component } from 'react';
class ReadModule extends Component {
selectedText() {
console.log("You selected some text");
}
render() {
return (
<div id="read-module" className="row">
<p>Reading:</p>
<span onSelect={this.selectedText}>{this.props.reading}</span>
</div>
);
}
}
export default ReadModule;
The above doesn't work. If there is an approach that is better i.e. extracting a string please do let me know! Once i get a simple
on highlight trigger function
Concept working I can take it from there. Thanks in advance
Solution:
import React, { Component } from 'react';
class ReadModule extends Component {
selectedText() {
var txt = "";
if (window.getSelection) {
txt = window.getSelection();
}
else if (document.getSelection) {
txt = document.getSelection();
} else if (document.selection) {
txt = document.selection.createRange().text;
}
alert("Selected text is " + txt);
}
render() {
return (
<div id="read-module" className="row">
<p>Reading:</p>
<span onMouseUp={this.selectedText}>{this.props.reading}</span>
</div>
);
}
}
export default ReadModule;
Upvotes: 5
Views: 50453
Reputation: 31
React has this option. In my opinion You have to bind function to this key word:
onSelect={this.selectedText.bind(this)}
So, Your code will look like this:
import React, { Component } from 'react';
class ReadModule extends Component {
selectedText() {
console.log("You selected some text");
}
render() {
return (
<div id="read-module" className="row">
<p>Reading:</p>
<span onSelect={this.selectedText.bind(this)}>{this.props.reading}</span>
</div>
);
}
}
export default ReadModule;
Upvotes: 1
Reputation: 3402
Check out https://github.com/ydeshayes/react-highlight
To get the effect you want with a regular DOM element involves a lot of delicate code handling mouse events.
You could cheat and use an <input>
or <textarea>
instead and style it to look like regular text. Then onSelect
should just work.
Upvotes: 3