首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果属性等于某个值,则为目标HTML元素

如果属性等于某个值,则为目标HTML元素
EN

Stack Overflow用户
提问于 2016-07-22 07:29:44
回答 3查看 886关注 0票数 1

我有一个HTML模板字符串,它为每个用户从一个Ajax调用将一些用户信息转换成一个div。每个div都有一个带有falsetrue值的data-stream属性。

如果element为真,我希望使用JSjQuery锁定目标,并在其上使用CSSaddClass

如果值为true,则可能显示绿色图标;如果值为false,则显示红色图标。

JS

代码语言:javascript
复制
var target = $('#result')

target.prepend('<div data-stream="' + userObj.stream + '" class="item "> <a target="_blank" href="' + userObj.url + '"> <img class="logo" src="' + userObj.logo + '"/> <span class="name">' + userObj.name + '</span> </a> </div>')

我的尝试

代码语言:javascript
复制
  if ( typeof $(".item").attr('data-stream') === "true" ) {
            // style div here..
          }

这不起作用,也不起作用:

代码语言:javascript
复制
 $('.item').filter(function(){
               var $this = $(this)
               return $this.data('data-stream') === true
            }).addClass('online')

也不:

代码语言:javascript
复制
 $("#results .item").find("[data-stream='true']")

要做到这一点,必须有一个非常简单的方法,使用jQuery或JS有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-22 07:31:55

您的$("#results .item").find("[data-stream='true']")非常接近,但是它作为.item元素的后代查找具有该属性的项。您希望查找本身具有该属性和值的.item元素:

代码语言:javascript
复制
$("#results .item[data-stream='true']")

注意.item[data-stream='true']之间没有空格。这是一个复合选择器。

或者,如果您有理由像对find那样分别执行这些操作,则使用filter而不是find (但前提是您有理由将这两个方面分开):

代码语言:javascript
复制
// If you have reason to separate the two aspects
$("#results .item").filter("[data-stream='true']")

复合选择器的实例:

代码语言:javascript
复制
var target = $('#result')

target.prepend('<div data-stream="true" class="item ">This is the true one</div>');
target.prepend('<div data-stream="false" class="item ">This is the false one</div>');

console.log("Turning the true one blue with a class");
$("#result .item[data-stream='true']").addClass("foo");
代码语言:javascript
复制
.foo {
  color: blue;
}
代码语言:javascript
复制
<div id="result"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

附带注意:问题的一部分使用id result,其他部分使用results。你会想要匹配的。

票数 2
EN

Stack Overflow用户

发布于 2016-07-22 07:32:40

您只能使用CSS,针对数据流属性值:

更新:使用: the根据数据属性放置图标

代码语言:javascript
复制
.item:before {
   font-family: FontAwesome;
   font-weight: normal;
   font-style: normal;
   display: inline-block;
   text-decoration: inherit;
   margin-right:5px;
}
.item[data-stream="true"]:before {
   content: "\f00c";
   color: green;       
 } 
.item[data-stream="false"]:before {
   content: "\f00d";
   color:red;
 } 
代码语言:javascript
复制
<div data-stream="true" class="item ">True</div>
<div data-stream="false" class="item ">False</div>
<div data-stream="true" class="item ">True</div>
<div data-stream="true" class="item ">True</div>
<div data-stream="false" class="item ">False</div>
<div data-stream="false" class="item ">False</div>

票数 1
EN

Stack Overflow用户

发布于 2016-07-22 07:33:51

当您希望Javascript操作唯一的DOM元素时,应该始终对这些元素使用in,以便便于访问。

将代码更改为如下内容:

代码语言:javascript
复制
target.prepend('<div id="YOUR_INIQUE_ID" data-stream="' + userObj.stream + '" class="item "> <a target="_blank" href="' + userObj.url + '"> <img class="logo" src="' + userObj.logo + '"/> <span class="name">' + userObj.name + '</span> </a> </div>')

并在以后使用这些ID访问元素:

代码语言:javascript
复制
jQuery('#YOUR_INIQUE_ID').css('display','none');

加法:

再次检查您的问题时,我注意到您不是在唯一的文档元素(或希望操作非常特定的文档元素)之后,而是在元素的之后。我的第一个回答不适合你的情况。

T.J.克劳德方案适合你的情况。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38520633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档