js或者angular获取img图片的src($event.target和this的使用)

参考:

彻底弄懂事件冒泡和事件捕获

<section ng-repeat="brand in brands track by $index"  class="brandElistSe">
    <ul class="check_fu">
        <li class="brandElist" ng-repeat="brList in brand">
            <a href="###" ng-click="brandFnc($event)">{{brList}}</a> 
        </li>
    </ul>
</section>
$scope.brandFnc = function($event) {
    // 通过 $event.target 来获取
}

参考:

AngularJs在ng-click函数中如何获取代表当前元素的DOM对象

示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jquery.js"></script>
    <script src="../angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<div>
    <img src="quiz_pic04.png">

    <button onclick="getSrc(this)">获取src</button>

    <button ng-click="ngGetSrc($event)">获取src</button>

    <i ng-click="ngGetSrcAgain($event)">
        <img src="photo_pic02.png">
    </i>
</div>

<script>
    //ng-click怎样获取当前元素
    var app = angular.module("myApp", []);
    app.controller("myCtrl", function ($scope) {
        $scope.ngGetSrc = function (ev) {
            console.log(ev.target);
            //<button ng-click="ngGetSrc($event)">获取src</button>
            console.log(ev.target.parentElement);//
//              <div>
//                <img src="quiz_pic04.png">
//                <button onclick="getSrc(this)">获取src</button>
//                <button ng-click="ngGetSrc($event)">获取src</button>
//                <i ng-click="ngGetSrcAgain($event)">
//                  <img src="photo_pic02.png">
//                </i>
//              </div>
            console.log(ev.target.parentElement.children[0].src);
            //http://localhost:63343/untitled19/app/xiangce/quiz_pic04.png
            console.log(ev.target.previousElementSibling);
            //<button onclick="getSrc(this)">获取src</button>
            console.log(ev.target.nodeName);//BUTTON
            console.log(ev.target.outerHTML); 
            //<button ng-click="ngGetSrc($event)">获取src</button>
            console.log(ev.target.innerHTML);//获取src
        };

        $scope.ngGetSrcAgain = function (ev) {
            console.log(ev.target);
            //注意:此时target不是i节点,而是img节点

            //<img src="photo_pic02.png">
            console.log(ev.target.parentElement);
//            <i ng-click="ngGetSrcAgain($event)">
//                <img src="photo_pic02.png">
//            </i>
            console.log(ev.target.src);
            //http://localhost:63343/untitled19/app/xiangce/photo_pic02.png
            console.log(ev.target.parentElement.children[0].src);
            //http://localhost:63343/untitled19/app/xiangce/photo_pic02.png
            console.log("previousElementSibling===" + ev.target.previousElementSibling);
            //null
            console.log("nodeName===" + ev.target.nodeName);//IMG
            console.log("outerHTML===" + ev.target.outerHTML);//<img src="photo_pic02.png">
            console.log("innerHTML===" + ev.target.innerHTML);//空
        };


    });

    //js 的 onclick 获取图片的src
    var getSrc = function (who) {
        var src = $(who).parent().children('img:first-child').attr("src");//方法一
        console.log(src);//quiz_pic04.png
        var src1 = $(who).parent().find("img")[0].src;//方法二
        console.log(src1);//http://localhost:63343/untitled19/app/xiangce/quiz_pic04.png
        var pre = $(who).prev().attr("src");//方法三
        console.log(pre);//quiz_pic04.png

        console.log($(who));//[button, context: button]
        console.log($(who).prev());//[img, prevObject: m.fn.init[1], context: button]
        console.log($(who).parent());//[div, prevObject: m.fn.init[1], context: button]
        console.log($(who).parent()[0].tagName);//DIV
        console.log($(who).parent().children('img:first-child')[0].tagName);//IMG
    }
</script>
</body>
</html>

this和event.target的区别:

每次触发DOM事件时会产生一个事件对象(也称event对象),此处的参数e接收事件对象。而事件对象也有很多属性和方法,其中target属性是获取触发事件对象的目标,也就是绑定事件的元素,e.target表示该DOM元素,然后在获取其相应的属性值。

js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素;
.this和event.target都是dom对象

示例:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>e.target</title>
    <script src="../jquery.js"></script>
</head>
<body>
<div id="temp"></div>
<ul class="JQ-content-box" style="padding:20px; background:#FFFFFF">
    <li>第一行
        <ul>
            <li>这是公告标题1</li>
            <li>这是公告标题2</li>
            <li>这是公告标题3</li>
            <li>这是公告标题4</li>
        </ul>
    </li>
</ul>
<script>
    $(function () {
        $("li").on("click", function (e) {
            console.log("e.target==="+e.target);
            console.log("this==="+this);
            $("#temp").html("clicked: " + e.target.nodeName);

            /*不冒泡*/
            $(e.target).css("color", "#FF3300");//点击标题4 只有第四个变蓝色
            /*冒泡*/
//            $(this).css("color", "#0000ff");//点击标题4 都变蓝
        })
    });
</script>
</body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值