我正在尝试从网页上的一个特定的a-tag从注入的脚本调用ng-click。
我怎样才能从我的页面中找到确切的a-tag?我知道如果我有一个类名,我可以写($('a.classname')),,但是有没有办法找到包含innerHTML 苹果的标签呢?
如果没有,是否可以调用ng-click,因为它是页面上的第10个a-tag?作为a10
页面上的标签:
<a ng-click="myFunction()">Apple</a>
注入的脚本:
angular.element($('a')).scope().$apply(function() {
angular.element($('a')).scope().myFunction();
});
发布于 2019-03-28 19:48:43
如果您试图在外部执行此操作,例如在扩展中或从控制台,则只需在目标元素上触发单击事件即可。
您可以使用eq()
来确定<a>
索引的目标,或者使用:contains
选择器,或者为了更精确地测试文本,可以使用filter()
angular
.module('app', [])
.controller('MainCtrl', ($scope) => {
$scope.myFunc = (val) => {
console.log('Clicked value = ', val)
};
});
// from outside angular app
setTimeout(() => {
// by index
$('a').eq(3).click()
// or by text contains
$('a:contains(Apple)').click();
// using filter()
$('a').filter(function() {
return this.textContent.trim() === 'Apple';
}).click();
}, 500)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.js"></script>
<div ng-app="app" ng-controller="MainCtrl">
<a href ng-click="myFunc(1)">1</a>
<a href ng-click="myFunc(2)">2</a>
<a href ng-click="myFunc(3)">3</a>
<a href ng-click="myFunc(4)">Apple</a>
</div>
发布于 2019-04-01 02:21:54
关于我在charlietfl的回答中对xpath的评论,我想我也会分享我提到的例子。
// by specific anchor tag from full xpath
var nodesSnapshot = document.evaluate("//html/body/div[1]/a[1]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ )
{
nodesSnapshot.snapshotItem(i).click();
nodesSnapshot.snapshotItem(i).style.background = 'yellow';
console.log('Clicked first <' + nodesSnapshot.snapshotItem(i).tagName + '> tag and marked it yellow')
}
// or by specific anchor tag from xpath by index that contains the text
var nodesSnapshot = document.evaluate("//a[3][text()[contains(., 'Apple')]]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ )
{
nodesSnapshot.snapshotItem(i).click();
nodesSnapshot.snapshotItem(i).style.background = 'pink';
console.log('Clicked third <' + nodesSnapshot.snapshotItem(i).tagName + '> tag that contains ' + nodesSnapshot.snapshotItem(i).text + ' and marked it pink')
}
<div ng-app="app" ng-controller="MainCtrl">
<text>1: </text><a ng-click="myFunction()">Apple</a>
<text>2: </text><a ng-click="myFunction()">Apple</a>
<text>3: </text><a ng-click="myFunction()">Apple</a>
</div>
https://stackoverflow.com/questions/55396246
复制相似问题