这是一个我遇到的问题,我不太确定如何解决它。
假设我有一个段落:
"This is a test paragraph. I love cats. Please apply here"
我希望用户能够点击句子中的任意单词,然后返回包含该单词的整个句子。
这是一个我遇到的问题,我不太确定如何解决它。
假设我有一个段落:
"This is a test paragraph. I love cats. Please apply here"
我希望用户能够点击句子中的任意单词,然后返回包含该单词的整个句子。
你首先需要将你的段落拆分成元素,因为没有元素,你无法(轻松地)检测到点击文本的操作:
$('p').each(function() {
$(this).html($(this).text().split(/([\.\?!])(?= )/).map(
function(v){return '<span class=sentence>'+v+'</span>'}
));
});
请注意,它会正确地分割像这样的段落:
<p>I love cats! Dogs are fine too... Here's a number : 3.4. Please apply here</p>
然后你需要绑定点击事件:
$('.sentence').click(function(){
alert($(this).text());
});
我不知道在英语中:
是否是句子之间的分隔符。 如果是,当然可以将其添加到正则表达式中。
。
、?
或!
作为结尾标点。我们可以暂时忘记感叹号和其他标点符号。另外,让我们忽略引用标点符号,比如"!"
,它并不是句子的结尾。"Foo?"
最终会被解析为"Foo?"
而不是"Foo?
。$('p').each(function() {
var sentences = $(this)
.text()
.replace(/([^.!?]*[^.!?\s][.!?]['"]?)(\s|$)/g,
'<span class="sentence">$1</span>$2');
$(this).html(sentences);
});
$('.sentence').on('click', function() {
console.log($(this).text());
});
这并不是完美的(例如,引号内的标点符号会破坏它),但它能在99%的情况下工作。
;
和 :
字符,因为它们也是自然的写作分隔符。正则表达式应该是 /(((?![.!?;:]['"]?\s).)*[.!?;:]['"]?)(\s|$)/g
。 - iwasrobbed/[^!.?]+[!.?]/g
的正则表达式来实现。span
标签替换每个句子,以便弹出整个标签。不确定如何获得完整的句子。但是,如果您通过空格拆分每个单词,可以尝试这样做以逐个获取单词。
<div id="myDiv" onmouseover="splitToSpans(this)" onclick="alert(event.target.innerHTML)">This is a test paragraph. I love cats. Please apply here</div>
function splitToSpans(element){
if($(element).children().length)
return;
var arr = new Array();
$($(element).text().split(' ')).each(function(){
arr.push($('<span>'+this+' </span>'));
});
$(element).text('');
$(arr).each(function(){$(element).append(this);});
}