使用 Javascript 个带条件的集合

Using Javascript Collections with Conditions

我正在尝试根据文本内容是否满足特定条件来为元素设置 'readonly' 属性。具体而言,条件是元素必须包含文本“已支付”或“待支付”。我遇到了两个问题,我似乎无法克服几个小时;

  1. 我无法 select 包含 text/phrase“待付款”的元素。问题可能是“待处理”和“已支付”之间的 space 吗?因为我能够 select 所有包含文本“已支付”的元素。

  2. 如果满足上述条件(元素的文本内容包含单词 'Disbursed' 或短语 'Pending Disbursement')?

这是我到目前为止的想法。

    var statusClassCollection = document.getElementsByClassName('req-status');
    var textContent_criteria = ['Disbursed', 'Pending Disbursement'];
    var approvedReqsCollection = Array.prototype.filter.call(
        statusClassCollection,
        ({
            textContent
        }) => textContent_criteria.includes(textContent)
    );

    for (j = 0; j < approvedReqsCollection.length; j++) {

        var amountsClassCollection = document.getElementsByClassName("req-amount-input");
        for (i = 0; i < amountsClassCollection.length; i++) {

            amountsClassCollection[i].readonly = true;
            amountsClassCollection[i].editReqAmount = function() {
                return false;
            };

        }
    }

这是例子。我想如果有任何 DisbursedPending Disbursement span 元素,你想将所有输入设置为 readOnly。

const statusClassCollection = document.getElementsByClassName("req-status");
const criteria = ["Disbursed", "Pending Disbursement"];

let isCriteriaMatched = false;

for (let i = 0; i < statusClassCollection.length; i++) {
  if (criteria.includes(statusClassCollection[i].textContent)) {
    isCriteriaMatched = true;
    break;
  }
}

if (isCriteriaMatched) {
  const amountsClassCollection =
    document.getElementsByClassName("req-amount-input");
  for (let i = 0; i < amountsClassCollection.length; i++) {
    amountsClassCollection[i].readOnly = true;
  }
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <div>
      <span class="btn btn-sm btn-success req-status"
        >Disbursed<i class="bi bi-check-all"></i
      ></span>
      <span class="btn btn-sm btn-success req-status"
        >Pending Disbursement<i class="bi bi-check-all"></i
      ></span>
      <span class="btn btn-sm btn-success req-status"
        >Pending Disbursement<i class="bi bi-check-all"></i
      ></span>
      <span class="btn btn-sm btn-success req-status"
        >Disbursed<i class="bi bi-check-all"></i
      ></span>
    </div>
    <div>
      <input class="req-amount-input" type="text" />
    </div>
  </body>
</html>