我有一个问题, 我想隐藏一个"我"元素如果" span"包含一个" div"元件。 " span"包含通过呈现为HTML的AJAX加载的文本 可能包含也可能不包含" div class = difference"
代码看起来像这样:
JAVASCRIPT:
$scope.hasChild = function() {
if ($('span.difference').has('div'))
return true;
else
return false;
};
HTML:
<ul ng-repeat="instance in value">
<li>
<i class="fa fa-warning" style="color: #ff6a00;" ng-if="hasChild()"></i>
<span class="difference" ng-bind-html="trustAsHtml(instance.Dati)"></span>
</li>
</ul>
始终显示警告图标
我做错了什么?
答案 0 :(得分:0)
您在这里使用全局选择器(span.difference
):
$scope.hasChild = function() {
if ($('span.difference').has('div'))
return true;
else
return false;
};
因此所有元素的条件将基于第一个(或可能是最后一个?)span元素。
无论如何,您只需要修改当前元素的跨度兄弟hasChild
函数。类似的东西:
if ($(this).siblings('span.difference').find('div').length > 0)
这是一个仅限jQuery的版本,应该很容易重写为Angular(如果你需要帮助,请告诉我):
$('i').each(function() {
if ($(this).siblings('span.difference').find('div').length > 0)
$(this).show();
else
$(this).hide();
})
i {background: #ff6a00;}
div {padding-bottom: 20px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<i class="fa fa-warning">Warning</i>
<span class="difference">Span 1</span>
</div>
<div>
<i class="fa fa-warning">Warning</i>
<span class="difference">Span 2<div>with a div (not a proper structure btw)</div></span>
</div>
答案 1 :(得分:0)
由于jQuery的.attendance-sheet .data .names > div
始终返回一个对象,即使您的span为空,条件也始终为true。
尝试像
.has()
但是这会在所有$scope.hasChild = function() {
return $('span.difference').find('div').length > 0;
};
中搜索类span
。请尝试检查实例difference
属性。
Dati
BTW。:You should not put a block element inside an inline element.
答案 2 :(得分:0)
这样的事情?
*.zip
答案 3 :(得分:0)
&#34; NG-如果&#34;接受表达。 请参阅此处:https://docs.angularjs.org/api/ng/directive/ngIf
对于您的情况,您只需要将功能更新到下面。
$scope.isDanger = false;
$scope.hasChild = function() {
if ($('span.difference').has('div').find('div').length > 0)
$scope.isDanger = true;
else
$scope.isDanger = false;
};
并且忘了提一下,你需要在ajax响应之后调用$ scope.hasChild()函数。 并用下面的
替换标签<i class="fa fa-warning" style="color: #ff6a00;" ng-if="isDanger"></i>