我试图理解angularJS过滤器的机制,并尝试扩展其最初的功能。目前据我所知,当您执行过滤时,它将在每个html元素上搜索value属性来匹配。这在大多数情况下都很有效。这个问题的症结在于下拉列表。如果您将选项的文本设置为< code>Hello world并且value = 1
,则搜索将查看< code >的value属性
<div ng-app="CategoryFieldApproversApp">
Search:<input id="txtSearch" ng-model="search" type="text" placeholder="Search" />
@using (Html.BeginForm("CategoryFieldApprovers", "Maintenance", FormMethod.Post))
{
<div ng-controller="CategoryFieldApproversCtrl">
<table class="table table-striped table-hover">
<thead>
<tr>
<th width="1%"></th>
<th ng-click="sort('Name')" width="200">Category Field</th>
<th ng-click="sort('Name')" width="150">Approver</th>
<th></th>
</tr>
</thead>
<tbody>
<tr dir-paginate="categoryFieldApprover in categoryFieldApprovers|orderBy:sortKey:reverse|itemsPerPage:5" ng-show="ddlVisibility(categoryFieldApprover)">
<td>
<input type="hidden" name="CategoryFieldApprovers[{{$index}}].CategoryFieldApproverID" ng-model="categoryFieldApprover.CategoryFieldApproverID" value="{{categoryFieldApprover.CategoryFieldApproverID}}" />
<input type="hidden" id="hdnIsDirty" name="CategoryFieldApprovers[{{$index}}].IsDirty" value="{{categoryFieldApprover.IsDirty}}" />
</td>
<td>
<input class="hdnCategoryFieldID" type="hidden" name="CategoryFieldApprovers[{{$index}}].CategoryFieldID" value="{{categoryFieldApprover.CategoryFieldID}}" />
<select ng-model="categoryFieldApprover.CategoryFieldID" ng-options="categoryField.CategoryFieldID as categoryField.Name for categoryField in categoryFields | filter:{Name :search}"></select>
</td>
<td>
<input class="hdnApproverOneUserID" type="hidden" name="CategoryFieldApprovers[{{$index}}].ApproverOneUserID" value="{{categoryFieldApprover.ApproverOneUserID}}" />
<select ng-model="categoryFieldApprover.ApproverOneUserID" ng-options="user.UserID as user.DisplayName for user in users | filter:{DisplayName :search}"></select>
</td>
<td>
<input type="button" ng-click="remove($index)" ng-show="categoryFieldApprover.ShowRemove" value="Remove" />
</td>
</tr>
</tbody>
</table>
<dir-pagination-controls max-size="5"
direction-links="true"
boundary-links="true">
</dir-pagination-controls>
<br />
<a class="btn btn-default" ng-click="add()">Add Field Approver</a>
<input class="btn-primary btn-sm" ng-click="save()" type="button" value="Save" />
</div>
}
</div>
<script>
var App = angular.module('CategoryFieldApproversApp', ['angularUtils.directives.dirPagination']).controller('CategoryFieldApproversCtrl', function ($scope, $http) {
$http.get("@Url.Action("GetCategoryFieldApprovers", "Maintenance")").success(function (response) {
$scope.categoryFieldApprovers = response; //ajax request to fetch data into $scope.data
});
$http.get("@Url.Action("GetCategoryFields", "Maintenance")").success(function (response) {
$scope.categoryFields = response; //ajax request to fetch data into $scope.data
});
$http.get("@Url.Action("GetUsers", "Maintenance")").success(function (response) {
$scope.users = response; //ajax request to fetch data into $scope.data
});
$scope.sort = function (keyname) {
$scope.sortKey = keyname; //set the sortKey to the param passed
$scope.reverse = !$scope.reverse; //if true make it false and vice versa
}
$scope.remove = function (index) {
$scope.categoryFieldApprovers.splice(index, 1);
};
$scope.add = function () {
$scope.categoryFieldApprovers.splice(0, 0, {
CategoryFieldApproverID: 0,
CategoryFieldID: 0,
ApproverOneUserID: 0,
ApproverTwoUserID: 0,
ShowRemove: true
});
};
$scope.save = function () {
$('tbody tr').find('.ng-dirty').each(function (i, dirtyElement) {
$(dirtyElement).closest('tr').find('#hdnIsDirty').val(true);
});
$('form').submit();
};
$scope.ddlVisibility = function (categoryFieldApprover) {
if ($('#txtSearch').val() != "" && (categoryFieldApprover.CategoryFieldID == null && categoryFieldApprover.ApproverOneUserID == null)) {
return false;
}
else {
return true;
}
}
});
</script>
更新:从tr元素中删除了|filter: search。然后为每个下拉列表添加了filter:{Name: search}。它现在将正确过滤和显示/隐藏那些通过检查的行。现在唯一剩下的问题是,当过滤器函数执行时,如果下拉列表所选项目未通过测试,它会将所选索引设置为0,即空白项目。我如何防止它仅仅因为未能从过滤器中包含而更改选择?
请在这里看这个小演示。如果你正在寻找相同的功能,那么你只需要指定你想搜索的过滤器内的属性。
过滤器:{名称:搜索}
例如
<select ng-model="categoryFieldApprover.CategoryFieldID" ng-options="categoryField.CategoryFieldID as categoryField.Name for categoryField in categoryFields | filter:{Name :search}"></select>
问题 在解析获得一个Document实例对象,并查找到一些元素之后,你希望取得在这些元素中的数据。 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的文本,可以使用Element.text()方法 对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或Node.outerHtml()方法 示例: String html =
我有以下XML。 我在http://chris.photobooks.com/xml/default.htm上查看了它,它显示xpath无效,不确定问题出在哪里。
问题内容: 所以我有一个这样的HTML字符串: 使用XPath,我可以使用以下Xpath查询来获取href属性的值: 而且,获得文本值甚至更容易,如下所示: 现在,我很想知道,我如何才能将这两个查询组合在一起而只用一个查询来获得两个值(如果这甚至是可能的话?)。 问题答案: 取 然后使用选中文本,使用选中属性。 除此之外,您可以将Xpath查询与Union Operator结合使用,从而可以使用
我有以下元素。计数在跨度元素中,文本在 DIV 标记中。当我将鼠标悬停在计数上时,它只读取数字,当我将鼠标悬停在 DIV 标记的文本上时,它只读取文本。但我希望屏幕阅读器将完整文本读取为“1 文档”。为此,我保留了带有计数的“aria标签”属性,并为具有类“列表项”的父DIV保留了文本。但它仍然只阅读文本“文档”,而不是整个计数。
问题内容: 我正在尝试查找具有Attribute的元素。好吧,我可以在Selenium中找到具有Id,tagName,Xpath和所有其他预定义方法的元素。但是,我正在尝试编写一种方法,该方法将给定属性名称和值作为输入专门返回WebElement。 假设XPath不是一个选择,还有其他更好的方法吗? 问题答案: 您可以使用CSS轻松完成此任务。 公式为: 所以如果有的话 您可以使用以下方法找到它:
我正在尝试查找具有属性的元素。我可以在Selenium中找到Id、tagName、Xpath和所有其他预定义方法的元素。但是,我正在尝试编写一个方法,专门返回WebElement,给定属性名和值作为输入。 假设XPath不是一个选项,还有其他更好的方法吗?