Jquery:点击它时有没有办法突出显示Div的文本?
使用Jquery有一种方法可以突出显示/选择(如果有人用鼠标选择它)我点击的div内的文本? 不是文本框,只是普通的div。
我正在尝试创建一个“短url”框,当有人点击文本区域时,它会突出显示所有文本,但它也不需要允许人们更改文本框中的文本,但是当文本框被禁用时不能选择任何文字,所以我想这样做,我只是觉得div是最简单的。
对不起,伙计们我最初没有很好地解释我的意思,上面添加了信息以澄清。
是的,这不是关于背景颜色,而是关于选择文本。
首先将输入设置为readonly,阻止人们更改值:
然后使用jQuery(或类似)选择单击后的文本:
$('input').click(function() { $(this).select(); });
您应该根据需要设置此输入的样式,也许是为了使其看起来像正常的文本, 请查看此jsFiddle以进行进一步演示。
单击后可以修改元素的CSS。 像(未经测试)的东西:
$(".el").click( function() { $(".el").css( "color", "red" ).css( "background-color", "yellow" ); });
$("div.myDiv").click(function() { $(this).css("background-color", "yellow"); })
或者你可以添加一个类:
$("div.myDiv").click(function() { if($(this).hasClass("highlited")) { $(this).removeClass("highlited"); } else { $(this).addClass("highlited"); } }
您可以使用textarea而不是禁用它,使用’readonly’属性
这是我前段时间放在一起的快速而又脏的无jQuery代码片段:
/* * Creates a selection around the node */ function selectNode(myNode){ // Create a range try{ // FF var myRange = document.createRange(); }catch(e){ try{ // IE var myRange = document.body.createTextRange(); }catch(e){ return; } } // Asign text to range try{ // FF myRange.selectNode(myNode); }catch(e){ try{ // IE myRange.moveToElementText(myNode); }catch(e){ return; } } // Select the range try{ // FF var mySelection = window.getSelection(); mySelection.removeAllRanges(); // Undo current selection mySelection.addRange(myRange); }catch(e){ try{ // IE myRange.select(); }catch(e){ return; } } }
它可以使用很多改进(我特别讨厌try-catch块的过多),但这是一个很好的起点。 “节点”是指DOM树中的一个项目。
Working demo
如果你只谈论点击而不是在任何div里面选择。 它会是这样的:
$("div").click(function() { $(this).css({"background":"yellow"}); });
为什么不使用css:
div.:focus { background:yellow; }
选择由DOM中的范围对象定义 – 因此您必须使用它们(document.createRange或document.createTextRange)。 看到这个SO线程: 选择元素中的文本(类似于用鼠标突出显示)