【问题标题】:Get the selector string from DOM element with native Javascript [duplicate]使用本机 Javascript 从 DOM 元素中获取选择器字符串 [重复]
【发布时间】:2016-08-14 21:57:59
【问题描述】:

通常,我们使用querySelectorAll('html:eq(0) > body:eq(0) > div.row:eq(0) > div.span4:eq(2) > p.p3:eq(2)') 来获取DOM ELEMENT。

如果我想使用带有原生 javascript 的 ELEMENT <p class="p3">target</p> 来获取选择器字符串,我应该怎么做?

例如:

<div class="row">
    <div class="span4">
        <p class="p1">p1_1<p>
        <br>
        <p class="p1">p1_2<p>
        <p class="p1">p1_3<p>
    </div>
    <br>
    <div class="span4">
        <p class="p2">p2_1<p>
        <p class="p2">p2_2<p>
        <br>
        <p class="p2">p2_3<p>
    </div>
    <p>stranger</p>
    <div class="span4">
        <p class="p3">p3_1<p>
        <br>
        <p class="p3">p3_2<p>
        <br>
        <p class="p3">target<p>
    </div>
<div>
<div class="row">
    <div class="span3">
        <p class="p3">p1<p>
        <br>
        <p class="p3">p2<p>
        <p class="p3">p3<p>
    </div>
<div>
<br>
<div class="row">
    <p>stranger</p>
<div>

这就是我的想法:

  1. 利用元素&lt;p class="p3"&gt;target&lt;/p&gt; 的这些属性,我发现这些很有用:
    • 属性
    • 下一个元素兄弟
    • previousElementSibling
    • 父元素
  2. Attribute => attributes:我可以用它生成像div.className#idName这样的字符串,这并不难。
  3. Attribute => nextElementSibling, previousElementSibling:我可以用它生成像:eq(0)这样的字符串。

我遇到的问题是Step3,因为如果两个DIV之间有BR,那么这两个ElementSibling将返回BR,这意味着BR被视为兄弟这两个具有相同类的 div,但这不是我想要的。

所以我尝试考虑使用Step3.1:

3.1。 Attribute => parentElement:使用元素的父元素获取eq,它是谁? 0、1、2.....

但是我发现我无法指定目标元素是哪一个,因为他有很多相同的兄弟有相同的tagName和className....

我想知道你们有什么好的想法吗?

【问题讨论】:

  • :eq() 不是 CSS 选择器。此外,任何任意元素都可以被至少一个选择器唯一地访问。
  • 您是否尝试选择其中包含“目标”内容的任何元素?有点不清楚你的目标到底是什么。
  • @TylerH 对不起,内容为“目标”的元素,在这里只是一个例子,我想最后为任何元素创建一个函数
  • @BoltClock 谢谢你的回复,我知道有一些任意元素,这只是一个例子,当然,最后这个函数是用于uniq元素的
  • @LeylaLee 所以你想选择所有元素的最后一个子元素?或者特别是每组&lt;p&gt;元素的最后一个&lt;p&gt;

标签: javascript


【解决方案1】:

如果您尝试根据 html 查找元素,在本例中为“目标”,您可以这样做:

var elms = document.querySelectorAll('p');
var targetElm;
for (var i = 0; i < elms.length; i++) {
   if (elms[i].innerHTML === 'target') {
       targetElm = elms[i];
   }
}

【讨论】:

  • 不,OP 有一个元素,正在尝试为它构建一个选择器字符串。
  • @BoltClock 似乎她没有定义一个可以简化为唯一选择器的案例。如果是她要搜索的唯一内容,则上述答案有效。
  • 谢谢你的回复,mac。但是,如果还有一些其他元素的 innerHTML 也是 'tget' 呢?但其他元素与函数的输入不一样......
  • @LeylaLee 您可以应用基于 document.querySelectorAll 的子选择。我不确定我是否足够了解您的用例以在此处提供选择器。您能否详细说明“其他元素与函数的输入不同”的意思?
  • @mac 对不起我的英语不好 T.T,好的 example &lt;div class="row"&gt; &lt;div class="span4"&gt; &lt;p class="p1"&gt;p1_1&lt;p&gt; &lt;br&gt; &lt;p class="p1"&gt;p1_2&lt;p&gt; &lt;p class="p1"&gt;p1_3&lt;p&gt; &lt;/div&gt; &lt;br&gt; &lt;div class="span4"&gt; &lt;p class="p2"&gt;p2_1&lt;p&gt; &lt;p class="p2"&gt;p2_2&lt;p&gt; &lt;br&gt; &lt;p class="p3"&gt;target&lt;p&gt; &lt;/div&gt; &lt;p&gt;stranger&lt;/p&gt; &lt;div class="span4"&gt; &lt;p class="p3"&gt;p3_1&lt;p&gt; &lt;br&gt; &lt;p class="p3"&gt;p3_2&lt;p&gt; &lt;br&gt; &lt;p class="p3"&gt;target&lt;p&gt; &lt;/div&gt; &lt;div&gt;
猜你喜欢
  • 2016-10-20
  • 2011-07-04
  • 2014-04-04
  • 2014-01-10
  • 2016-09-18
  • 2014-11-10
  • 2018-04-25
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多