如何使用getElementById和getElementsByTagName一起获取元素的值

时间:2015-04-30 19:09:04

标签: javascript jquery json pretty-print

我正在尝试prettyprint我将获得xml或JSON作为字符串的<pre>元素的值,因此我首先尝试获取值,然后测试它是否为xml或json并在这里调用各自的prettyprint方法是我的代码...

function showData(attName) {
    var attData = document.getElementById(attName).getElementsByTagName('pre')[0];
    alert(attData);
    // once I get the value would like to test whether it is xml or json
    //if (attData contains xml test condition )
          prettyPrint.xml(attData);
    else prettyPrint.json(attData);

    document.getElementById('Details').style.display='none';
    document.getElementById(attName).style.display='block';
}    

因此,每当我点击以下代码中的查看链接时,都会调用showData

<div id="Details" class="body">
    <a href="javascript:showData('${attachmentName}')">View</a>
</div>
<div id="${attachmentName}" style="display:none; margin-left:60px; margin-top:5px;position:absolute;background-color:#F8F8F8;padding:10px" >
    <h1>${attachmentName}:${attachmentId}</h1>

    <a href="javascript:hideData('${attachmentName}')"><h5 style="color: #FF0066;"> [X Close] </h5></a> <br/>

    <pre class="prettyprint">${attachmentData}</pre>
</div>  

在警报中我得到[object HTMLPreElement]但不知道如何使它成为字符串,所以我也试过......

var objectHTMLCollection = document.getElementById(attName).getElementsByTagName('pre')[0],
    string = [].map.call( objectHTMLCollection, function(node){
        return node.textContent || node.innerText || "";
    }).join("");
alert (objectHTMLCollection);

但仍然是HTMLPreElement ...

我尝试过JQuery jQuery('#'+attName).find('.prettyprint').data();,但结果为[object Object]。 我没有在JavaScript中有太多曝光,可能是我没有以正确的方式做到这一点。如果有人能帮忙的话会很棒。

3 个答案:

答案 0 :(得分:2)

添加.innerHTML - 应该可以工作,摆脱复杂的映射函数,这些函数可以同时处理多个<pre>标记。

      var attData = document.getElementById(attName).getElementsByTagName('pre')[0].innerHTML;
      alert(attData);

答案 1 :(得分:1)

如果你正在使用jQuery:

using TestAlias= Class1.test;

它可以获取元素的文本内容。

答案 2 :(得分:0)

您的上一个js代码段已关闭,但您在非数组对象上调用map,并将错误的var传递给alert()。要找到所有'pre'元素:

var htmlObject = document.getElementById(attName);
var str = htmlObject.textContent || htmlObject.innerText || "";
alert (str);

如果您实际上只是在寻找一个'pre'元素:

<dependency>
    <groupId>net.glxn</groupId>
    <artifactId>qrgen</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>net.sf.barcode4j</groupId>
    <artifactId>barcode4j-light</artifactId>
    <version>2.1</version>
</dependency>

请记住,元素的id是唯一的,因此查询id和标记名称毫无意义。