Jquery:有没有办法在单击 Div 时突出显示它的文本?

发布于 2024-09-29 02:10:45 字数 235 浏览 6 评论 0原文

使用 Jquery 有没有一种方法可以突出显示/选择(就像有人用鼠标选择它一样)我点击的 div 内的文本?不是一个文本框,只是一个普通的div。

我正在尝试制作一个“短网址”框,当有人单击文本区域时,它会突出显示所有文本,但它也不需要允许人们更改文本框中的文本,但是当文本框被禁用时,您无法选择任何文本,所以我正在尝试这样做,我只是认为 div 是最简单的。

抱歉,我一开始没有很好地解释我的意思,在上面添加了信息来澄清。

With Jquery is there a way to highlight/select(like if someone were to select it with the mouse) the text inside of a div that i click on? not a textbox, just a normal div.

i'm trying to make a 'short url' box, where when someone clicks on the textarea, it highlights all the text, but it also needs to NOT allow people to change the text in the textbox, but when a textbox is disabled you can't select any text, so i'm trying to do that, i just thought a div would be easiest.

sorry guys i didn't do a great job of explaining what i meant at first, added info above to clarify.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

泪冰清 2024-10-06 02:10:45

是的,这与背景颜色无关,而是与选择文本有关。

首先将输入设置为只读,阻止人们更改值:

<input type="text" readonly="readonly" value="ABC" />

然后使用 jQuery(或类似的)在单击文本后选择文本:

$('input').click(function() {
    $(this).select(); 
});

您应该根据需要设置此输入的样式,也许可以使其看起来像普通的文本,看看这个 jsFiddle 以获得进一步的演示。

Right, this isn't about background colours, it's about selecting the text.

First set an input to readonly, stopping people changing the value:

<input type="text" readonly="readonly" value="ABC" />

Then using jQuery (or similar) to select the text once it's been clicked:

$('input').click(function() {
    $(this).select(); 
});

You should style this input as you see fit, perhaps to make it look like a normal bit of text, take a look at this jsFiddle for a further demonstration.

就是爱搞怪 2024-10-06 02:10:45
$("div.myDiv").click(function() {
   $(this).css("background-color", "yellow");
})

或者你可以添加一个类:

$("div.myDiv").click(function() {
   if($(this).hasClass("highlited")) {
      $(this).removeClass("highlited");
   } else {
      $(this).addClass("highlited");
   }
}
$("div.myDiv").click(function() {
   $(this).css("background-color", "yellow");
})

Or you can add a class:

$("div.myDiv").click(function() {
   if($(this).hasClass("highlited")) {
      $(this).removeClass("highlited");
   } else {
      $(this).addClass("highlited");
   }
}
吃颗糖壮壮胆 2024-10-06 02:10:45

单击元素后,您可以修改该元素的 CSS。像(未经测试)的东西:

$(".el").click( function() {

  $(".el").css( "color", "red" ).css( "background-color", "yellow" );

});

You can modify the CSS of the element after it has been clicked. Something like (untested):

$(".el").click( function() {

  $(".el").css( "color", "red" ).css( "background-color", "yellow" );

});
罪#恶を代价 2024-10-06 02:10:45

您可以使用文本区域,而不是禁用它,而是使用“只读”属性

<textarea name="selectable" readonly="readonly" />

You can use a textarea and instead of disabling it, use the 'readonly' attribute

<textarea name="selectable" readonly="readonly" />
酒中人 2024-10-06 02:10:45

这是我前段时间整理的一个快速而肮脏的无 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 树中的一个项目。

Here's a quick and dirty jQuery-less code snippet I put together some time ago:

/*
 * 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;
        }
    }
}

It could use a lot of improvement (I specially hate the over-abundance of try...catch blocks) but it's a good starting point. With "node" I mean an item from the DOM tree.

音栖息无 2024-10-06 02:10:45

工作演示

如果您只谈论单击而不是在任何内容中进行选择分区它会是这样的:

$("div").click(function()
             {
                $(this).css({"background":"yellow"});
             });

Working demo

If you talk only about clicking and not selecting inside any div. It would be something like this:

$("div").click(function()
             {
                $(this).css({"background":"yellow"});
             });
献世佛 2024-10-06 02:10:45

为什么不直接使用CSS:

div.<someclass>:focus {
    background:yellow;
}

why not just use css:

div.<someclass>:focus {
    background:yellow;
}
旧故 2024-10-06 02:10:45

选择是由 DOM 中的范围对象定义的 - 因此您必须使用它们(document.createRange 或 document.createTextRange)。请参阅此线程: Selecting text in一个元素(类似于用鼠标突出显示)

A selection is defined by an range object in DOM - so you have to work with them (document.createRange or document.createTextRange). See this SO thread: Selecting text in an element (akin to highlighting with your mouse)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文