0

我是Chrome用户,我想定制一些网站。我的 Chrome 有Tampermonkey(类似于 Firefox 的 Greasemonkey)扩展。现在我可以为特定网站添加一些 Javascript 代码。

现在,我想要的只是从某个表中获取价值并将其显示在弹出窗口中。

HTML 代码示例:

<div id="Content">

<table><tbody><tr>
<td>Text number 1</td>
<td>Text number 2</td>
</tr></tdoby></table>

<table><tbody><tr>
<td>Text number 3</td>
<td>Text number 4</td>
</tr></tdoby></table>

<table><tbody><tr>
<td>Text number 5</td>
<td>Text number 6</td>
</tr></tdoby></table>

</div>

到目前为止我的代码:

var xpath = "id('Content')/table[1]/tbody/tr/td[2]";
var result = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null );
myWin=window.open('','','width=400,height=400');
myWin.document.write(result);

但它不显示此“td”的内容(文本编号 2)

任何想法?

4

2 回答 2

2

这不是您使用 XPath 的方式。 result,在这种情况下是一个迭代器

代码将类似于:

var xpath   = "id('Content')/table[1]/tbody/tr/td[2]";
var result  = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null );
var node    = result.iterateNext();
var nodeTxt = node.textContent
var myWin   = window.open('','','width=400,height=400');
myWin.document.write (nodeTxt);

除了,不要使用 XPath! 既然您刚开始,请使用document.querySelector或者更好的是使用jQuery

这是CSS 选择器的方式:

var node    = document.querySelector (
    "#Content > table:first-child > tbody > tr > td:nth-child(2)"
);
var nodeTxt = node.textContent
alert (nodeTxt);

笔记。使用alert()或 jQuery UI 对话框来处理这类事情。window.open如果您能提供帮助,请避免尝试使用。

这是一个完整的脚本,展示了 jQuery 的方式:

// ==UserScript==
// @name     _YOUR_SCRIPT_NAME
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
var nodeTxt = $("#Content > table:first > tbody > tr > td:eq(1)").text ();
alert (nodeTxt);
于 2013-05-26T20:05:32.460 回答
0

我已经根据您提供的 XPath 创建了您的 HTML 结构。由于您不需要 XPath,我将使用普通元素访问:

HTML

<div id="Content">
    <table>
        <tbody>
            <tr>
                <td>Text number 1</td>
                <td>Text number 2</td>
            </tr>
        </tbody>
    </table>
    <table>
        <tbody>
            <tr>
                <td>Text number 3</td>
                <td>Text number 4</td>
            </tr>
        </tbody>
    </table>
    <table>
        <tbody>
            <tr>
                <td>Text number 5</td>
                <td>Text number 6</td>
            </tr>
        </tbody>
    </table>
</div>

Javascript

var div = document.getElementById('Content'),
    table = div.getElementsByTagName('table')[1],
    tr = table.getElementsByTagName('tr')[0],
    td = tr.getElementsByTagName('td')[1];
alert(td.innerHTML);

工作JSFiddle

于 2013-05-26T19:31:24.607 回答