0

为什么不起作用angular.element('<p>').css('color', 'red');

angular
  .module('app', [])
  .controller('MainController', MainController)
;

function MainController() {
  // angular.element('p').css('color', 'red'); ERROR. Now I see what the docs meant by "HTML String"
  // angular.element('<p>').css('color', 'red'); No error, but doesn't work
  angular.element(document.querySelector('p')).css('color', 'red'); // Works
}
<!DOCTYPE html>
<html ng-app='app'>

  <head>
    <script data-require="angular.js@1.4.6" data-semver="1.4.6" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-controller='MainController as vm'>
    <p>test</p>
  </body>

</html>

4

1 回答 1

1

根据文档angular.element接受“要包装到 jQuery 中的 HTML 字符串或 DOMElement”。

第二个示例不会出错,因为您实际上是在传递一个 HTML 字符串。这将导致angular.element返回一个新创建的 jQuery 对象,而不是作用于现有对象。

您可以通过将新元素分配给变量来说明这一点:

var newElement = angular.element('<p>');

这等同于您在完整的 jQuery 中发现的行为:

var newElement = $('<p>');

最后一个示例使用querySelector它返回实际的 HTML DOM 元素。这是 Angular 需要对现有元素进行操作(除非您包含 jQuery - 然后您可以像在 jQuery/示例 1 中一样使用选择器)。

于 2015-10-09T18:37:55.830 回答