Javascript 从光标/旧版中的选择中获取选定元素

Javascript 从光标/旧版中的选择中获取选定元素,javascript,dom,internet-explorer-8,selection,Javascript,Dom,Internet Explorer 8,Selection,我想检查所选内容或光标是否位于某个元素或此元素中的某个元素中 我想我可以通过所选元素的父元素来检查这一点。 大概是这样的: var elements = [el_1, el_2, el_3]; // element x, y and z function elementActiv(el) { if (elements.indexOf(el) == -1) { if (el.parentElement) { return elementActiv(

我想检查所选内容或光标是否位于某个元素或此元素中的某个元素中

我想我可以通过所选元素的父元素来检查这一点。 大概是这样的:

var elements = [el_1, el_2, el_3]; // element x, y and z

function elementActiv(el) {
    if (elements.indexOf(el) == -1) {
        if (el.parentElement) {
            return elementActiv(el.parentElement);
        }
        else {
            return false;
        }
    }

    return true;
}

function check() {
    var selectedElement;

    if (typeof window.getSelection != "undefined") {
        // IE 9 and other non-IE browsers
        selectedElement = window.getSelection().baseNode.parentElement;
    }
    else if (document.selection) {
        // IE 8 and below
        selectedElement = ???; // How to get the selected element here??
    }

    if (selectedElement) {
        return elementActiv(selectedElement);
    }
}
我的问题是我不知道如何在IE 8及以下版本中获取所选元素。

有人知道怎么做吗?或者有人知道如何用另一个解决方案来实现这一点吗?

我在IE 8及以下版本中找到了获取所选元素的解决方案

document.selection.createRange().parentElement()
谢谢


请注意,您需要IE的indexOf原型:

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(obj, start) {
        for (var i = (start || 0), j = this.length; i < j; i++) {
            if (this[i] === obj) {
                return i;
            }
        }
        return -1;
    }
}
if(!Array.prototype.indexOf){
Array.prototype.indexOf=函数(obj,start){
对于(var i=(start | | 0),j=this.length;i

伊达从这里:



如果有人有更好的想法来解决我的问题,然后仔细检查所有的父元素,我会很高兴听到它。

不要再担心IE8的支持,继续:)有一个项目叫做,但实际上,除非你被告知“为IE8做”,否则不要支持它software@Matt鲍尔:我希望我能做到!!!但一些客户仍然使用WindowsXP和IE8;(@rontornanbe:jQuery对解决这个问题没有真正的帮助没有jQuery对不起,纯JS。请注意,这并不总是返回整个选择的祖先(请参阅)@Paul S:谢谢你的警告和引用。如果我理解你引用的评论是正确的,那么这不是问题,因为我经过我的循环,下一个(第一个parentElement)将是“right”元素,即带有选择的元素。