我正在处理different question的答案并遇到问题。
目标是使标签内的文字可以选择,就像你在iphone上做的那样(长按时文字变大,你可以看看从哪里开始选择),但文字周围有一个更大的可点击区域。要查看我的意思,请see this fiddle并点击边框区域。
现在它会自动选择给定p标签中的文字,但您无法搜索从哪里开始。
到目前为止代码
function extendSelection() {
var extendBy = arguments.length <= 0 || arguments[0] === undefined ? 15 : arguments[0];
var extended = document.getElementsByClassName('extendedSelection');
[].slice.call(extended).forEach(function (v) {
var bounds = v.getBoundingClientRect();
var x = bounds.left;
var r = textWidth(v.innerHTML, ''+ css(v, 'font-weight') +' ' + css(v, 'font-size') + ' ' + css(v, 'font-family') );
var y = bounds.top;
var w = bounds.width;
var h = bounds.height;
var element = document.createElement('div');
element.style.position = 'absolute';
element.style.height = h + extendBy + 'px';
element.style.width = r + extendBy + 'px';
element.style.left = x - extendBy / 2 + 'px';
element.style.top = y - extendBy / 2 + 'px';
element.style.border = '1px dotted black';
document.body.appendChild(element);
element.addEventListener('click', function (e) {
SelectText(v);
});
element.addEventListener('touchend', function (e) {
SelectText(v);
});
});
}
function css(element, property) {
return window.getComputedStyle(element, null).getPropertyValue(property);
}
function textWidth(text, font) {
var el = textWidth.canvas || (textWidth.canvas = document.createElement("canvas"));
var draw = el.getContext("2d");
draw.font = font;
var m = draw.measureText(text);
return m.width;
};
function SelectText(element) {
var doc = document,
text = element,
range,
selection;
if (doc.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(text);
range.select();
} else if (window.getSelection) {
selection = window.getSelection();
range = document.createRange();
range.selectNodeContents(text);
selection.removeAllRanges();
selection.addRange(range);
selection.setSelectionRange(0, element.value.length)
}
}
extendSelection();