想对网页的文本框填充表格,JS执行中,用硬编码的值可以正常填充,但是含参的值一直失败,请问如何解决。
回答
收藏

想对网页的文本框填充表格,JS执行中,用硬编码的值可以正常填充,但是含参的值一直失败,请问如何解决。
10

y
ydmy
2026-03-08 01:02·浏览量:59
y
ydmy
发布于 2026-03-08 01:0259浏览

row_values_str是两行表格CSV转化过来的JSON字符串了已经。

填写下面代码就是填充入的硬编码值,一直没有接收参数

function(row_values_str) {
    console.log("


    // ==========================================
    // 1. 【唯一修改点】解析传入的字符串
    // ==========================================
    
    var data;

    // 检查是否有传入参数
    if (row_values_str && typeof row_values_str === 'string' && row_values_str.trim().length > 0) {
        try {
            // 尝试解析字符串
            data = JSON.parse(row_values_str);
            console.log("

 成功解析传入的字符串数据。行数:", data.length);
        } catch (e) {
            console.error("

 解析失败:", e.message);
            console.error("原始字符串:", row_values_str);
            // 【容错机制】如果解析失败,为了防止流程中断,这里可以选择抛出错误
            throw new Error("

传入的字符串不是合法的 JSON 格式!请检查变量内容。\n报错:" + e.message);
        }
    } else {
        // 如果没有传入字符串,为了测试代码逻辑,可以使用下面的默认数据(调试用)
        // 正式运行时,如果有传参,这部分不会执行
        console.warn("

 未检测到有效字符串参数,使用默认测试数据...");
        data = [
            ["title", "Brand", "People", "size", "material"], 
            ["Test Item", "Test Brand", "Test Person", "100", "Steel"]
        ];
    }

    // 二次校验:确保解析出来的是数组且至少有2行
    if (!Array.isArray(data) || data.length < 2) {
        throw new Error("

 数据格式错误:解析结果必须是包含至少两行的数组 [表头行, 数据行]。");
    }

    console.log("

 准备填充数据 - 键数量:", data[0].length, "值数量:", data[1].length);

    // ==========================================
    // 2. 【完全保留】你之前成功的 XPath 和填充逻辑
    // ==========================================
    var rowXPath = '//form//div[contains(@class, "smtCustomAttrItem")]';
    var leftInputXPath = './/input[1]';
    var rightInputXPath = './/input[2]';

    var rowsSnapshot = document.evaluate(
        rowXPath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null
    );

    var totalRows = rowsSnapshot.snapshotLength;
    console.log("

 页面找到行数:", totalRows);

    if (totalRows === 0) {
        throw new Error("未找到任何属性行,请检查 XPath");
    }

    var successCount = 0;
    // 取 表头长度 和 页面行数 的最小值
    var limit = Math.min(data[0].length, totalRows); 

    for (var i = 0; i < limit; i++) {
        // 这里完全对应你成功的代码逻辑
        var key = data[0][i];   // 第1个数组的第i个元素
        var value = data[1][i]; // 第2个数组的第i个元素

        var rowNode = rowsSnapshot.snapshotItem(i);
        if (!rowNode) continue;

        var leftInput = document.evaluate(leftInputXPath, rowNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        var rightInput = document.evaluate(rightInputXPath, rowNode, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

        if (leftInput && rightInput) {
            leftInput.value = String(key);
            leftInput.dispatchEvent(new Event('input', { bubbles: true }));
            leftInput.dispatchEvent(new Event('change', { bubbles: true }));

            rightInput.value = String(value);
            rightInput.dispatchEvent(new Event('input', { bubbles: true }));
            rightInput.dispatchEvent(new Event('change', { bubbles: true }));

            successCount++;
        }
    }

    console.log("

 完成!成功填充:", successCount, "项");
    return "

 成功填充 " + successCount + " 项";
}

收藏
全部回答1
最新
发布回答
回答