【问题标题】:"between" CSS/jQuery selector“介于”CSS/jQuery 选择器
【发布时间】:2016-02-25 18:01:17
【问题描述】:

问题

鉴于 jQuery 选择了一个元素 (.context),我该如何选择它:

  • 不是特定类的子/孙的元素(例如.paragraph)[该类可以具有更深的自身嵌套级别,例如.paragraph .paragraph]
  • 具有特定标签集的子/孙元素(例如strong | i

注意事项

  • .context 可以是另一个 .context 或另一个 .paragraph 的后代。
  • 我要选择的元素可以通过[data-hint^="I want"]选择器来识别(很明显真实场景中不存在data属性)。
  • 我不仅想要.context 的直接子代,还想要后代(显然过滤掉了.context .paragraph 中包含的元素。

战场

$selection = $('.context').first();
$formatting_elements = $selection.find('strong, i')
                                 .not('.paragraph *');
.paragraph {
  margin: 15px;
  position: relative;
  border: 1px solid black;
}
.paragraph .paragraph {
  border: 1px solid #444;
}
.paragraph .paragraph .paragraph {
  border: 1px solid #888;
}

.context {
  margin: 15px;
  position: relative;
  background-color: limegreen;
}

[data-hint^="I want"] {
  background-color: violet;
}
.paragraph:before {
  content: '-paragraph-';
  position: absolute;
  bottom: 100%;
  left: 200px;
}
.context:before {
  content: '-context-';
  position: absolute;
  bottom: 100%;
  left: 200px;
  color: green;
}
.context .paragraph:before {
  font-style: italic;
  color: #444;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="paragraph">
    <i>bar</i>
    <div class="paragraph">
        <strong>foo</strong>
        <i>bar</i>
        <div class="context" data-hint="Find elements relative to this element">
            <i data-hint="I want to get this">foo</i>
            <div class="paragraph">
                <i>bar</i>
                <div class="paragraph">
                    <strong>foo</strong>
                    <div class="paragraph">
                        <strong>foo</strong>
                        <i>bar</i>
                    </div>
                    <i>bar</i>
                </div>
            </div>
            <strong data-hint="I want to get this">foo</strong>
            <i data-hint="I want to get this">bar</i>
        </div>
    </div>
</div>

我尝试了上面的脚本,但它似乎不起作用。

目标

能够选择并将 yellow 元素更改为 violet

【问题讨论】:

  • 给它一个特定的id 并调用jquery。这个链接可能对你有帮助w3schools.com/jquery/jquery_ref_selectors.asp
  • 你可以在问题中加入html 吗?
  • @guest271314 HTML 包括在内。
  • @Graham 我没有得到你的建议。能详细点吗?

标签: javascript jquery css tree jquery-selectors


【解决方案1】:

编辑

抱歉,误解了您的问题,因此重写了整个答案。

您在此处尝试实现的目标可以使用自定义过滤器功能来完成。

理论很简单,您选择所有满足特定条件的元素(包括作为特定选择器的子/孙的元素),然后根据父/祖父条件过滤您的集合

var myElements = $('strong, i').filter(
    function() {
      return $(this).parents('.context').length < 1;
    });

见工作小提琴here

更新

根据您的评论,我对小提琴进行了以下更改。我希望这就是你要找的。​​p>

var myElements = $('strong, i', '.context').filter(
function() {
  return $(this).parent('.context .paragraph').length < 1;
});

查看更新的小提琴here

【讨论】:

  • 这不起作用,因为parents()是一个返回父元素的函数(根据可选的选择器);即 not 用于过滤具有这些父元素的选定元素 :not。在我添加的标记中,($('.context').find('i, strong').parents(':not(.paragraph)') 仅返回 .context
  • 感谢您的努力。然而,小提琴得到了.context 的元素out(尝试更改myElements 的颜色以了解我的意思)。也许我的问题还不够清楚;我正在寻找选择一些标签istrong后代(不仅仅是孩子).context,但 不包含在.context .paragraph(注意.context 可能是外部.paragraph 的后代)。我想要获取的元素可以用 '[data-hint^="I want"]' 标识(显然只是在小提琴中)。
猜你喜欢
  • 2018-02-24
  • 1970-01-01
  • 2013-09-29
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
相关资源
最近更新 更多