Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取子属性_Javascript_Function_Attributes - Fatal编程技术网

Javascript 获取子属性

Javascript 获取子属性,javascript,function,attributes,Javascript,Function,Attributes,我一个接一个地多次使用此HTML代码: <li> <img src="path/to/my/picture.jpg" alt="my picture" /> <span>picture title</span> </li> clickedLi变量只是一个在包含文档中所有li标记的数组中循环的变量 这是我的完整JavaScript代码: var myLis = document.getElementsByTagName('l

我一个接一个地多次使用此HTML代码:

<li>
   <img src="path/to/my/picture.jpg" alt="my picture" />
   <span>picture title</span>
</li>
clickedLi
变量只是一个在包含文档中所有
li
标记的数组中循环的变量

这是我的完整JavaScript代码:

var myLis = document.getElementsByTagName('li');
var liCnt = myLis.length; 
for(var i = 0; i < liCnt; i++) {
    var currentLi = myLis[i];
    currentLi.onclick = function() {                

        var imgPath = firstElementChild(this);
        var pathLi = imgPath.getAttribute("src");

        var imgTitle = lastElementChild(this);
        var titleLi = imgTitle.firstChild.data;

        var myImgDiv = document.getElementById("test");
        myImgDiv.innerHTML = '<h2>' + titleLi + '</h2>';
        myImgDiv.innerHTML = '<img src="' + pathLi + '" alt="' + titleLi + '">' 

    }
}
var myLis=document.getElementsByTagName('li');
var liCnt=myLis.length;
对于(变量i=0;i
使用
.firstElementChild
.lastElementChild
避免空白文本节点

如果您支持较旧的浏览器,则需要一个垫片

function firstElementChild(el) {
    var child = el.firstElementChild;
    if (!child) {
        child = el.firstChild;
        while (child && child.nodeType !== 1)
            child = child.nextSibling;
    }
    return child;
}

function lastElementChild(el) {
    var child = el.lastElementChild;
    if (!child) {
        child = el.lastChild;
        while (child && child.nodeType !== 1)
            child = child.previousSibling;
    }
    return child;
}

clickedLi.onclick=function(){

var imgPath=firstElementChild(this);//使用
.firstElementChild
.lastElementChild
避免空白文本节点

如果您支持较旧的浏览器,则需要一个垫片

function firstElementChild(el) {
    var child = el.firstElementChild;
    if (!child) {
        child = el.firstChild;
        while (child && child.nodeType !== 1)
            child = child.nextSibling;
    }
    return child;
}

function lastElementChild(el) {
    var child = el.lastElementChild;
    if (!child) {
        child = el.lastChild;
        while (child && child.nodeType !== 1)
            child = child.previousSibling;
    }
    return child;
}

clickedLi.onclick=function(){

var imgPath=firstElementChild(this);//下面的代码满足您的要求:

<!DOCTYPE HTML>
<html>
    <head>
        <script>
            var p = {
                onload: function() {
                    var lis = document.getElementsByTagName("li");
                    for(var i = 0, ceiling = lis.length; i < ceiling; i++) {
                        lis[i].onclick = function() {
                            var childNodes = this.childNodes;
                            for(var j = 0, ceiling2 = childNodes.length; j < ceiling2; j++) {
                                if(childNodes[j].nodeType == 1) {
                                    if(childNodes[j].nodeName == "IMG") {
                                        alert(childNodes[j].src);
                                    } else if(childNodes[j].nodeName == "SPAN"){
                                        alert(childNodes[j].innerHTML);
                                    }
                                }
                            }
                        }
                    }
                }
            };
        </script>
    </head>
    <body onload="p.onload()">
        <ul>
            <li>
                <img src="path/to/my/picture1.jpg" alt="my picture" /> <span>picture title1</span>
            </li>
            <li>
                <img src="path/to/my/picture2.jpg" alt="my picture" /> <span>picture title2</span>
            </li>
        </ul>
    </body>
</html>

var p={
onload:function(){
var lis=document.getElementsByTagName(“li”);
对于(变量i=0,上限=lis.length;i<上限;i++){
lis[i].onclick=function(){
var childNodes=this.childNodes;
对于(var j=0,ceiling2=childNodes.length;j
  • 图片标题1
  • 图片标题2

  • 下面的代码符合您的要求:

    <!DOCTYPE HTML>
    <html>
        <head>
            <script>
                var p = {
                    onload: function() {
                        var lis = document.getElementsByTagName("li");
                        for(var i = 0, ceiling = lis.length; i < ceiling; i++) {
                            lis[i].onclick = function() {
                                var childNodes = this.childNodes;
                                for(var j = 0, ceiling2 = childNodes.length; j < ceiling2; j++) {
                                    if(childNodes[j].nodeType == 1) {
                                        if(childNodes[j].nodeName == "IMG") {
                                            alert(childNodes[j].src);
                                        } else if(childNodes[j].nodeName == "SPAN"){
                                            alert(childNodes[j].innerHTML);
                                        }
                                    }
                                }
                            }
                        }
                    }
                };
            </script>
        </head>
        <body onload="p.onload()">
            <ul>
                <li>
                    <img src="path/to/my/picture1.jpg" alt="my picture" /> <span>picture title1</span>
                </li>
                <li>
                    <img src="path/to/my/picture2.jpg" alt="my picture" /> <span>picture title2</span>
                </li>
            </ul>
        </body>
    </html>
    
    
    var p={
    onload:function(){
    var lis=document.getElementsByTagName(“li”);
    对于(变量i=0,上限=lis.length;i<上限;i++){
    lis[i].onclick=function(){
    var childNodes=this.childNodes;
    对于(var j=0,ceiling2=childNodes.length;j
    
  • 图片标题1
  • 图片标题2
  • 使用此HTML:

    <ul id="mylist">
        <li>
           <img src="path/to/my/picture1.jpg" alt="my picture" />
           <span>picture title 1</span>
        </li>
        <li>
           <img src="path/to/my/picture2.jpg" alt="my picture" />
           <span>picture title 2</span>
        </li>
        <li>
           <img src="path/to/my/picture3.jpg" alt="my picture" />
           <span>picture title 3</span>
        </li>
    </ul>
    
    • 图片标题1
    • 图片标题2
    • 图片标题3
    您可以这样做:

    var listItems = document.getElementById("mylist").getElementsByTagName("li");
    for (var i = 0, len = listItems.length; i < len; i++) {
        listItems[i].onclick = function() {
            var spanObj = this.getElementsByTagName("span")[0]; 
            var spanText = spanObj.textContent || spanObj.innerText;
            var imgSrc = this.getElementsByTagName("img")[0].src;
            // now you have imgSrc and spanText here to do with as you please
        };
    }
    
    var listItems=document.getElementById(“mylist”).getElementsByTagName(“li”);
    for(var i=0,len=listItems.length;i
    在此进行工作演示:

    加载文档后运行此代码。最简单的方法是将此代码放在
    标记之前,可以是内联的,也可以是包含在.js文件中的。

    使用此HTML:

    <ul id="mylist">
        <li>
           <img src="path/to/my/picture1.jpg" alt="my picture" />
           <span>picture title 1</span>
        </li>
        <li>
           <img src="path/to/my/picture2.jpg" alt="my picture" />
           <span>picture title 2</span>
        </li>
        <li>
           <img src="path/to/my/picture3.jpg" alt="my picture" />
           <span>picture title 3</span>
        </li>
    </ul>
    
    • 图片标题1
    • 图片标题2
    • 图片标题3
    您可以这样做:

    var listItems = document.getElementById("mylist").getElementsByTagName("li");
    for (var i = 0, len = listItems.length; i < len; i++) {
        listItems[i].onclick = function() {
            var spanObj = this.getElementsByTagName("span")[0]; 
            var spanText = spanObj.textContent || spanObj.innerText;
            var imgSrc = this.getElementsByTagName("img")[0].src;
            // now you have imgSrc and spanText here to do with as you please
        };
    }
    
    var listItems=document.getElementById(“mylist”).getElementsByTagName(“li”);
    for(var i=0,len=listItems.length;i
    在此进行工作演示:


    加载文档后运行此代码。最简单的方法是将此代码放在
    标记之前,可以是内联的,也可以是包含在.js文件中。

    您可能需要
    imgTitle.html()
    ,而不是
    。data
    。我不喜欢使用jQuery。只是个人偏好。您可能需要
    imgTitle.html()
    ,而不是
    。data
    。我不喜欢使用jQuery。只是个人偏好。为什么可以使用
    getElementsByTagName()时会如此复杂
    在上单击
    li
    标记,而不是走c