Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 允许用户选择链接文本的一部分_Html_Css - Fatal编程技术网

Html 允许用户选择链接文本的一部分

Html 允许用户选择链接文本的一部分,html,css,Html,Css,是否可以允许用户在链接内单击并选择文本的某些部分?(在某些或任何现代浏览器中。) 有没有CSS/HTML解决方案?或者有没有其他的,也许是JS的解决方案 例如,如果要在下面的示例中选择“想要选择此” HTML: 我试着在谷歌浏览器上使用以下内容。但它不允许用户选择链接内部的文本,只是禁用了元素的拖动 -webkit-user-select: all; -webkit-user-drag: none; 您可以在不希望选择的行中添加元素,然后应用-webkit user select:none

是否可以允许用户在链接内单击并选择文本的某些部分?(在某些或任何现代浏览器中。)

有没有CSS/HTML解决方案?或者有没有其他的,也许是JS的解决方案

例如,如果要在下面的示例中选择“想要选择此”

HTML:

我试着在谷歌浏览器上使用以下内容。但它不允许用户选择链接内部的文本,只是禁用了元素的拖动

-webkit-user-select: all;
-webkit-user-drag: none;
您可以在不希望选择的行中添加
元素,然后应用
-webkit user select:none

例如:

<a href="#">
    <span class="no-select">Don't want to select this.</span>
    Want to select this.
    <span class="no-select">Don't want to select this.</span>
</a>

看这个。它可以在Chrome中运行,但我现在无法测试其他浏览器。

有一种方法可以在JavaScript中实现这一点。您可以将链接替换为跨距,并处理鼠标向下和向上,以查看是否进行了选择,如果没有,则单击模拟链接

演示

代码:

var posX = -1, posY = -1;

$('a').each(function() {
    var a = $(this);
    a.replaceWith(
            $('<span />')
                .text(a.text())
                .attr({
                    href: a.attr('href'),
                    target: a.attr('target')
                })
                .addClass('selectable')
    );
});

$(document).on('mousedown', '.selectable', function(evt) {
    posX = evt.pageX;
    posY = evt.pageY;
});
$(document).on('mouseup', '.selectable', function(evt) {
    if(evt.pageX == posX && evt.pageY == posY) {
        alert('no selection. simulate click.');
        window.location.href = $(this).attr('href');
        // TODO: handle target attribute correctly
    }
});
var posX=-1,posY=-1;
$('a')。每个(函数(){
var a=$(本);
a、 取代(
$('')
.text(a.text())
艾特先生({
href:a.attr('href'),
目标:a.attr('target')
})
.addClass(“可选”)
);
});
$(document).on('mousedown','.selective',函数(evt){
posX=evt.pageX;
posY=evt.pageY;
});
$(document).on('mouseup','.selective',函数(evt){
if(evt.pageX==posX&&evt.pageY==posY){
警报('无选择。模拟单击');
window.location.href=$(this.attr('href');
//TODO:正确处理目标属性
}
});

这样,我仍然无法在链接内单击并选择部分文本。用户想要选择的文本由用户决定,因此是任意的。@Qtax您希望如何单击链接而不让它带您去某处?那么不,您不能。我不明白你是如何期望文本由用户决定的,不过:/你能详细说明一下吗,因为你的问题特别指出了不应该突出显示的文本……单击就是单击(鼠标下移,最多可移动4次(至少在Windows上),最后在同一元素上单击鼠标)。它不涉及(“主要”)鼠标移动或文本选择。单击并拖动/选择不是单击,而是鼠标按下(在本例中是在元素内部),而鼠标向上则在“很远”的地方,可能完全在元素外部。+1。尽管我更好奇的是是否有一个无JS的解决方案。可能不会。是的,一个干净的CSS解决方案是最干净的。但是由于
-webkit user select
没有按应有的方式工作,这似乎非常困难。不幸的是,这破坏了
元素上的常见交互,如右键单击、Ctrl+单击和中键单击。并不是说我有更好的解决方案(
<a href="#">
    <span class="no-select">Don't want to select this.</span>
    Want to select this.
    <span class="no-select">Don't want to select this.</span>
</a>
span.no-select {
    -webkit-user-select: none;
    -webkit-user-drag: none;
}
var posX = -1, posY = -1;

$('a').each(function() {
    var a = $(this);
    a.replaceWith(
            $('<span />')
                .text(a.text())
                .attr({
                    href: a.attr('href'),
                    target: a.attr('target')
                })
                .addClass('selectable')
    );
});

$(document).on('mousedown', '.selectable', function(evt) {
    posX = evt.pageX;
    posY = evt.pageY;
});
$(document).on('mouseup', '.selectable', function(evt) {
    if(evt.pageX == posX && evt.pageY == posY) {
        alert('no selection. simulate click.');
        window.location.href = $(this).attr('href');
        // TODO: handle target attribute correctly
    }
});