0

我想记录用户单击的元素(元素 id 或 xpath),例如,如果它的 href 它记录 xpath 或 id 或文本。我怎么能用javascript做到这一点?

我有什么:点击:

function recordClick() {
        var a = document.location
        alert("you just clicked on the page"+ a);
}

function onPageLoad() {
    //document.getElementsByTagName("body")[0].onclick = recordClick;
        document.getElementsByTagName("html")[0].onclick = recordClick;
}

window.onload = onPageLoad;

路径:

function createXPathFromElement(elm) { 
    var allNodes = document.getElementsByTagName('*'); 
    for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode) 
    { 
        if (elm.hasAttribute('id')) { 
                var uniqueIdCount = 0; 
                for (var n=0;n < allNodes.length;n++) { 
                    if (allNodes[n].hasAttribute('id') && allNodes[n].id == elm.id) uniqueIdCount++; 
                    if (uniqueIdCount > 1) break; 
                }; 
                if ( uniqueIdCount == 1) { 
                    segs.unshift('id("' + elm.getAttribute('id') + '")'); 
                    return segs.join('/'); 
                } else { 
                    segs.unshift(elm.localName.toLowerCase() + '[@id="' + elm.getAttribute('id') + '"]'); 
                } 
        } else if (elm.hasAttribute('class')) { 
            segs.unshift(elm.localName.toLowerCase() + '[@class="' + elm.getAttribute('class') + '"]'); 
        } else { 
            for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) { 
                if (sib.localName == elm.localName)  i++; }; 
                segs.unshift(elm.localName.toLowerCase() + '[' + i + ']'); 
        }; 
    }; 
    return segs.length ? '/' + segs.join('/') : null; 
}; 

function lookupElementByXPath(path) { 
    var evaluator = new XPathEvaluator(); 
    var result = evaluator.evaluate(path, document.documentElement, null,XPathResult.FIRST_ORDERED_NODE_TYPE, null); 
    return  result.singleNodeValue; 
} 
4

3 回答 3

2

很容易获得点击的东西的id

document.body.onclick = function(anEvent) {
    console.log(anEvent.target.id)
};

如果你使用 jQuery,你可以获得大量关于被点击对象的信息

$("body").click(function(anEvent){ console.log(anEvent);});

这回答了你的问题了吗?

于 2012-11-01T20:22:11.580 回答
1

像这样监听点击事件

$(function() {
    $(document).click(function(e) {
       // do whatever you want to with the captured event
    });
});

​</p>

于 2012-11-01T20:19:06.497 回答
1

我认为您最好尝试addEventListener(或attachEvent在 IE < 9 中):

var processClick = function(e)
{
    e = e || window.event;
    var target = e.target || e.srcElement;
    switch(target.tagName.toLowerCase())
    {
        case 'a':
            //do something with target.href || target.getAttribute('href');
            return e;//<-- perhaps .preventDefault() && .stopPropagation()
        case 'img': //deal with distict tags the way you want
            return img.getAttribute('src');//<-- do whatever you need to do here
    }
    if (target.id)
    {
        //do something with target.id
    }
}
if (window.addEventListener)
{
    window.addEventListener('click',processClick,false);
}
else
{
    window.attachEvent('onclick',processClick);
}

当然,您可以轻松地用各种函数调用替换开关,每次都将元素和/或事件对象作为参数传递。
在 XPath 方面,您可以在 MDN 上找到一些可以做到这一点的代码,我认为getXPathForElement那里可能特别适合您的需求。

于 2012-11-01T20:24:47.467 回答