簡體   English   中英

使用 javascript 從 html 頁面獲取數據

[英]get data from html page using javascript

我有一些 HTML - 很討厭,但不是我的,所以我無法控制它。 我需要從表單中提取一些數據,名字值 (ABDIGANI) 和姓氏值 (AHMED)。 使用 javascript 執行此操作的最佳方法是什么?

<div class="voffset3"></div>
    <div class="container well panel panel-default">
        <div class="panel-body">
            <div class="row">
                <div class="col-md-3">
                    <span class="ax_paragraph">
                        First name
                    </span>
                    <div class="form-group">
                        <div class="ax_h5">
                            ABDIGANI
                        </div>
                    </div>
                </div>
                <div class="col-md-3">
                    <span class="ax_paragraph">
                        Surname
                    </span>
                    <div class="form-group">
                        <div class="ax_h5">
                            AHMED
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

 var x = document.querySelectorAll(".panel-body > div >.col-md-3 > div > div"); x.forEach(myFunction); function myFunction(item, index) { //console.log(item.innerHTML.trim()); if (index===0){ console.log("First name: "+item.innerHTML.trim()); } if (index===1){ console.log("Surname: "+item.innerHTML.trim()); } }
 <div class="voffset3"></div> <div class="container well panel panel-default"> <div class="panel-body"> <div class="row"> <div class="col-md-3"> <span class="ax_paragraph"> First name </span> <div class="form-group"> <div class="ax_h5"> ABDIGANI </div> </div> </div> <div class="col-md-3"> <span class="ax_paragraph"> Surname </span> <div class="form-group"> <div class="ax_h5"> AHMED </div> </div> </div> </div> </div> </div> </div>

檢查這個

const firstName = document.querySelector('.row .form-group div').textContent.trim();

const surname = document.querySelector('.row > div:last-child .form-group div').textContent.trim();

注意:最好根據功能需要更改 html,例如如果您需要名字,那么您必須為具有名字的 div 保留一個 id 屬性,姓氏也是如此。 然后 select 那些字段使用 id 選擇器,因為即使您將來更改 html 頁面結構,功能也不會受到影響。

查看下面的 html 實際上應該如何的參考(只是為了確保您知道它,但您正在尋找的解決方案在前兩行中)例如:

<div class="voffset3"></div>
    <div class="container well panel panel-default">
        <div class="panel-body">
            <div class="row">
                <div class="col-md-3">
                    <span class="ax_paragraph">
                        First name
                    </span>
                    <div class="form-group">
                        <div class="ax_h5" id="firstNameField">
                            ABDIGANI
                        </div>
                    </div>
                </div>
                <div class="col-md-3">
                    <span class="ax_paragraph">
                        Surname
                    </span>
                    <div class="form-group">
                        <div class="ax_h5" id="surnameField">
                            AHMED
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

在大多數情況下,您可以考慮 HTML 結構良好。 試試下面的代碼片段。

編輯:由於第一條評論而進行了更改。

編輯:如果你有不止一行,你應該使用

document.querySelectorAll('.container > .panel-body > .row');

並為每個找到的元素獲取對,如下所示。

const markers = ['First name', 'Surname'];
const mRx = [new RegExp(markers[0]), new RegExp(markers[1])];

function findMarker(element) {
    for(let i = 0; i < mRx.length; i++) {
        if(element.innerHTML.match(mRx[i])) {
            return markers[i];
        }
    }
    return null;
}

function findValue(el) {
    return el.parentElement.querySelector('.form-group > div').innerHTML.trim();
}

const pairs = [... document.querySelectorAll('.ax_paragraph')]
    .map(el => {
        return {el: el, mk: findMarker(el)};
    })
    .filter(n => n.mk !== null)
    .map(o => {
        return {key: o.mk, value: findValue(o.el)};
    });
console.log(pairs);

如果您無法編輯 HTML,您可以使用 XPATH 作為示例。

document.querySelector('.form-group > div').textContent 但不修改 html 則無法區分名字和姓氏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM