我正在使用event.target或event.srcElement获取元素。使用javascript获取未使用id的相同html元素
我可以保存事件的哪些信息,以确切知道之前选择的元素,而不设置ID?
如果我关闭了页面,如何获取相同的元素?
保存所有的parentNode似乎是再次获取元素的一种非常缓慢的方式。
有没有更高效的方法?
该页面将包含固定数量的元素。但是这个页面不能改变,我不能包含id属性。但是,我会标记用户再次打开页面时最后一次点击的标签。
我正在使用event.target或event.srcElement获取元素。使用javascript获取未使用id的相同html元素
我可以保存事件的哪些信息,以确切知道之前选择的元素,而不设置ID?
如果我关闭了页面,如何获取相同的元素?
保存所有的parentNode似乎是再次获取元素的一种非常缓慢的方式。
有没有更高效的方法?
该页面将包含固定数量的元素。但是这个页面不能改变,我不能包含id属性。但是,我会标记用户再次打开页面时最后一次点击的标签。
我发现了一个有趣的方法。
要保存元素:
// Save node name and position with this
// el = elemento
var p = document.getElementsByTagName(nodeName);
for(var i=0; i<p.length; i++)
{
if(el == p[i])
{
return i;
}
}
要获取:
// With nodeName saved and "position" i
var elem = document.getElementsByTagName(nodeName)[i];
根据您的要求,最好的方法是根据类名生成某种xpath,如果它们不存在,则使用元素名称。如果你没有一个唯一的方法来获得元素的某种唯一标识符。看看我的jsfiddle的例子。
var getNodeIdentifier = function(element) {
return element.nodeName.toLowerCase() + "." + $(element).index();
};
var current = element;
var xpath = getNodeIdentifier(this);
while (current.parentNode != null) {
xpath = getNodeIdentifier(current.parentNode) + "/" + xpath;
current = current.parentNode;
}
console.log(xpath);
请注意,唯一的问题是,如果没有你的元素有任何类,这可能不会,因为如果你在用相同的节点类型同等级的多个元素工作,有没有办法唯一标识它们。
我需要类似的东西,我想知道什么可能错误使用CSS选择器(除旧的浏览器的兼容性)。
喜欢的东西:
$('body>div:nth-of-type(1)>div:nth-of-type(2)>ul>li:nth-of-type(3)')
http://jsfiddle.net/ddimitrop/Qa8P2/
人们可以很容易地建立路径到身体下面这样的选择。
function structureSelector(element) {
var tagName = element.tagName.toLowerCase();
if (tagName == 'body') {
return tagName;
}
var indexInParent = Array.prototype.indexOf.call(element.parentNode.childNodes, element);
return structureSelector(element.parentNode)+'>'+tagName+':nth-child('+(indexInParent+1)+')';
}
只是要清楚,'this'没有指向你需要(在事件处理的范围内)的元素? – cheeken
当你关闭页面并回到页面时,显然所有的元素都将被重新创建,因此唯一的方法就是创建一个唯一的id。你究竟想要做什么? – SoWeLie
最有效的方式几乎肯定是设置和'ID'。为什么禁止最简单的解决方案? –