您可以使用eval
但我不推薦它,因爲它可以打開安全漏洞和濫用的大門。
想像這樣的一個文件:
<p>
This is a <strong>test</strong>. With a <span>span</span>.
</p>
<ul>
<li>one</li>
<li>two</li>
</ul>
這個函數有一個節點作爲起點並解決了一個「路徑」,它由一系列由句點分隔的字段名稱的,針對該節點:
function resolvePath(node, path) {
var start = path.split(".", 1)[0];
var next = node[start];
var remainder = path.slice(start.length + 1);
if (remainder.length === 0)
return next;
return resolvePath(next, remainder);
}
通過上面的文件中,two
的console.log來電秀true
:
var span = document.querySelector("span");
var ul = document.querySelector("ul");
console.log(resolvePath(span, "parentNode.nextElementSibling") === ul);
console.log(resolvePath(ul, "previousElementSibling.lastElementChild") === span);
這是一個概念證明。我沒有照顧過路徑中無關空間的事情。此外,如果路徑中的任何步驟(除最後一個步驟之外)都解析爲未定義的值,則會引發炸彈襲擊。我認爲這是可取的,因爲它可以防止在路徑上輸入錯誤,但可能有些情況下,轟炸不是所需的行爲。根據需要調整。
感謝路易斯 - 我應該提到我想避免Eval(儘管我在試用時遇到了問題)。乾杯:) – Ian 2014-09-12 07:01:11