項目 上遇到 innHTML 放入 一大段的html 內容 中帶有 click 事件 如onclick="callInMethod("http://www.crm.bmcc.com.cn/kb/cs/kb/knowledge/jsspan.html?methodName=openRelateDoc&docId=2015070102GJ225722&docName=扣費主動提醒和業務訂購二次確認服務")" 這樣的事件 ,因爲要在指定的ng-controller 內獲取 onclick 函數 內的 指定 id 值。因此不得不監聽 獲取 這個點擊事件。javascript
爲了讓個人控制器可以對文檔層面上的鼠標事件有所反應,我必須建立一個自定義AngularJS指令,它將會把DOM節點和控制器的$scope方法「粘合」起來。在下面的例子中,我建立了「bnDocumentClick」屬性指令:html
bn-docuemnt-click="handleClick($event)"
這個指令將會在當前控制器的$scope對象的上下文中處理這個給定的表達式。在下面的例子中,$event對象其實就是潛在的jQuery事件對象。java
mIndex.directive( "bnDocumentClick", function( $document, $parse ){ //將Angular的上下文連接到DOM事件 var linkFunction = function( $scope, $element, $attributes ){ //得到表達式 var scopeExpression = $attributes.bnDocumentClick; //使用$parse來編譯表達式 var invoker = $parse( scopeExpression ); //綁定click事件 $document.on( "click", function( event ){ //當點擊事件被觸發時,咱們須要再次調用AngularJS的上下文。再次,咱們使用$apply()來確保$digest()方法在幕後被調用 $scope.$apply( function(){ //在scope中調用處理函數,將jQuery時間映射到$event對象上 invoker( $scope, { $event: event } ); } ); } ); //當父控制器被從渲染文檔中移除時監聽"$destory"事件 }; //返回linking函數 return( linkFunction ); } );
指定 範圍的標籤 加入app
<div id="createDiv" ng-controller="c_textHt"
bn-document-click="handleClick( $event )"></div>
controller中內容以下 :
$scope.handleClick = function( event ){ if(event.target.parentNode.parentNode.href=="javascript:"){ console.log(event.target.parentNode.parentNode) var cc = event.target.parentNode.parentNode console.log(cc.getAttribute("onclick")) alert(cc.getAttribute("onclick")) var dd =cc.getAttribute("onclick").split("docId")[1].split("&")[0].split("=")[1] console.log(dd) } };