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线程: 选择元素中的文本(类似于用鼠标突出显示)