通过javaScript中的属性值获取元素

时间:2014-05-15 06:06:47

标签: attributes element entity-attribute-value

我希望通过基于属性值的javascript获取元素,根据示例我想通过属性“doc-cid”获取元素,并且“doc-cid”的值是动态的。

<p align="center" style="font-family:times;" doc-cid="11303">
<font size="2" doc-cid="11304">55</font></p>



<p id="demo">Click the button to change the text of a list item.</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction()
{
var list = document.getElementsByTagName("doc-cid=\"11303\"")
alert(list.getAttribute("doc-cid"));
}
</script>

1 个答案:

答案 0 :(得分:1)

我将首先介绍一下上述代码,并提供解决方案。

<强> POINTERS

  1. doc-cid不是“TagName”,它是自定义属性。因此,尝试getElementsByTagName的函数将始终因“doc-cid”而失败。
  2. doc-cid可以通过动态(或不是)无所谓。查找函数将始终获取元素的CURRENT DOM值(除非您特别指示它)。
  3. 我建议您在html中使用新的“data- *”属性,它会使您的标记有效(如果这对您很重要)。用途如下: 您的内容

  4. <强>解

    function getElementByAttribute (attribute, value, start) {
                var start    = start || document,
                    cache, //store found element
                    i;
    
                function lookup(start) {
                    // if element has been found and cached, stop
                    if (cache) {
                        return;
                    } else if (start.getAttribute(attribute) === value) { // check if current element is the one we're looking for
                        cache = start;
                        return;
                    } else if (start.childElementCount > 0) { // if the current element has children, loop through those
                        lookup(start.children[0]);
                    } else if (start.nextElementSibling) { // if the current element has a sibling, check it
                        lookup(start.nextElementSibling);
                    } else {
                        return;
                    }
                }
    
                lookup(start);
    
                return cache;
            }
    

    你只需给函数你正在查找的属性名称,你需要匹配的值和查找的起始点(如果没有指定起始点,它将从你页面的最开始开始(慢得多) )。 以下是您的标记示例:

        // you have no easy to get starting point, so we'll traverse the DOM
        getElementByAttribute('doc-cid', '11303');
    

    如果你想从一个更好的节点开始,你可以添加一个包装div元素并给它 id =“wrapper”然后你可以按如下方式调用该函数:

    var start = document.getElementById('wrapper');
    getElementByAttribute('doc-cid', '11303', start);
    

    希望这有帮助。