Javascript 有没有办法检测I';我在文本上徘徊?

Javascript 有没有办法检测I';我在文本上徘徊?,javascript,jquery,dom,text,hover,Javascript,Jquery,Dom,Text,Hover,我真正想要的是检测光标何时变为“text”类型,也就是说,当我悬停在一段文本上时。我已经试着查看我悬停在上面的元素类型,但这并不太准确,因为我不知道它们实际上包含什么 我知道,只有在我之前分配了CSS游标属性的情况下,才可能检测该属性 这可能吗?你打算怎么做 编辑: 我不想检查我当前是否在某个特定元素上,我想知道我是否在该元素中的任何文本上悬停。div可以是浏览器的100%宽度,但在最左边有一段较短的文本。我不想在将鼠标悬停在元素的任何部分上时进行检测 无需尝试检测光标是否更改 通过使用这种构造

我真正想要的是检测光标何时变为“text”类型,也就是说,当我悬停在一段文本上时。我已经试着查看我悬停在上面的元素类型,但这并不太准确,因为我不知道它们实际上包含什么

我知道,只有在我之前分配了CSS游标属性的情况下,才可能检测该属性

这可能吗?你打算怎么做

编辑:
我不想检查我当前是否在某个特定元素上,我想知道我是否在该元素中的任何文本上悬停。div可以是浏览器的100%宽度,但在最左边有一段较短的文本。我不想在将鼠标悬停在元素的任何部分上时进行检测

无需尝试检测光标是否更改

通过使用这种构造,您可以简单地检测鼠标是否悬停在文本上:

document.getElementById('myTextId').onmouseover = function() {
    // do something like for example change the class of a div to change its color :
    document.getElementById('myDivId').className = 'otherColor';
};
如果没有id,只有类或标记,可以用getElementsByClassName或getElementByTagName替换getElementById(将返回要迭代的数组)

如果您想在离开元素时恢复颜色,我建议您以相同的方式绑定onmouseout事件

例如,如果您想对任何段落执行某些操作,您可以执行以下操作:

var paras = document.getElementByClassName('p');
for (var i=0; i<paras.length; i++) {
    paras[i].onmouseover = function() {
        // do something like for example change the class of a div to change its color :
        document.getElementById('myDivId').className = 'otherColor';
    };
}
var-paras=document.getElementByClassName('p');
对于(var i=0;i如果您正在使用jQuery(您应该这样做,因为jQuery非常棒),请执行以下操作:

$("#myDiv").mouseover(function() {
    $("#myDiv").css("background-color", "#FF0000");
}); 

一种可能的方法是找到DOM中的所有文本节点,并将它们包装在具有特定类的范围内。然后,您可以选择该类并对其执行任何操作:

// Wrap all text nodes in span tags with the class textNode
(function findTextNodes(current, callback) {
    for(var i = current.childNodes.length; i--;){
        var child = current.childNodes[i];
        if(3 === child.nodeType)
            callback(child);
        findTextNodes(child, callback);
    }
})(document.body, function(textNode){ // This callback musn't change the number of child nodes that the parent has. This one is safe:
    $(textNode).replaceWith('<span class="textNode">' + textNode.nodeValue + '</span>');
});

// Do something on hover on those span tags
$('.textNode').hover(function(){
    // Do whatever you want here
    $(this).css('color', '#F00'); 
},function(){
    // And here
    $(this).css('color', '#000');
});
//使用类textNode在span标记中包装所有文本节点
(函数findTextNodes(当前,回调){
对于(var i=current.childNodes.length;i--;){
var child=current.childNodes[i];
if(3==child.nodeType)
回拨(儿童);
findTextNodes(子节点、回调);
}
})(document.body,function(textNode){//此回调不能更改父节点的子节点数。此回调是安全的:
$(textNode).replacetwith(“”+textNode.nodeValue+“”);
});
//在这些span标记上悬停,在上面做些什么
$('.textNode').hover(函数(){
//在这里你想干什么就干什么
$(this.css('color','#F00');
},函数(){
//这里呢
$(this.css('color','#000');
});


很明显,这将用大量的span标记填充您的DOM,并且您只想在页面加载时执行一次,因为如果您再次运行它,它将使span的数量增加一倍。如果您已经将自定义css应用于span,这也可能会做一些奇怪的事情。

如果您解释您的用例,我打赌您会得到更好的答案。您可能正在查看pr用错误的方法解决问题。鼠标悬停复制:@Madmartigan我只是想能够检测到它,这样我就可以向用户显示它,就像在悬停任何文本时更改div的背景颜色一样。很抱歉,我不相信这是可能的。理论上,你可以找到页面上的每个文本节点,并将其包装成s平移,然后在这些跨距的悬停处做一些事情。然而,这是非常低效的,并且会改变页面的结构。我相当确定这不是问题的目的。没有可使用的
id
或选择器,他希望在光标位于任何“文本”上时进行检测。遗憾的是,我认为这是不可能的。@JamesMontagne你是对的,如果我不够清楚,我很抱歉。任何文本,不。但这并不意味着什么。所以我认为需要某些文本。这就是我提到按类或标记搜索的原因。通常你会有类似“

”的内容您可以使用GetElementsByCassName。不,它适用于所有文本节点,简单地说,就是在页面的所有元素中。例如,当鼠标光标变为文本类型时。所有文本节点:这将毫无用处(看看您的html,到处都有文本节点)。以段落或某些类为目标。你最好有一个坚如磐石的CSS重置,以取消适用于这些

span
的任何样式(nuke=inline style with
!至少重要
)基本上是我在评论中提到的。这将基本上起作用,但这可能是一个非常糟糕的想法。我真的会考虑这个特性是多么重要。@ JaveMangTayne是的……我不支持这个:p在非缩小HTML上,这也会产生大量空洞/空格填充的跨度标签。据我所知,这是唯一的。不过,这是一个很好的实现方法,因为您无法向文本节点添加事件。如果您的新用户使用javascript,JQuery是可以的,但是如果您已经记住了所有跨浏览器兼容代码,那么加载速度就不必太差了。