Многократная замена - PullRequest
       33

Многократная замена

0 голосов
/ 29 февраля 2020

Обратите внимание на следующий код

async function handleRequest(req) {
  const res = await fetch(req)
  return rewriter.transform(res)
}

 class AttributeRewriter {
  constructor(attributeName) {
    this.attributeName = attributeName
  }

  element(element) {
    const attribute = element.getAttribute(this.attributeName)
    if (attribute) {
      element.setAttribute(
        this.attributeName,
        attribute.replace('/product/', '/p-'),

      )
    }
  }
}

const rewriter = new HTMLRewriter()
  .on('a', new AttributeRewriter('href'))
  .on('link', new AttributeRewriter('href'))



addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

Этот код отлично работает Описание: Я заменим / product / на / p- этим кодом. Теперь я ' я собираюсь заменить эти a.com значения b.com и stati c .a.com на cdn.b. com Я собираюсь заменить их все в этом коде

1 Ответ

0 голосов
/ 03 марта 2020

Полагаю, я понимаю, что проблема в том, что вы хотели бы сделать несколько замен строк для атрибутов href всех элементов. В частности, вы хотите заменить / product / на / p, а также заменить a.com на b.com и stati c .a.com на cdn.b.com.

Если это так, то одним простым подходом было бы связать дополнительные вызовы .replace () для каждой замены, которую вы хотели бы сделать. Например, что-то вроде этого может работать:

element.setAttribute(
  this.attributeName,
  attribute
    .replace('/product/', '/p-')
    .replace('//a.com/', '//b.com/')
    .replace('//static.a.com/', '//cdn.b.com/')
)

С этим кодом href = "http://a.com/product/name" будет заменено на href = "http://b.com/p-name".

Я надеюсь, что это помогает! https://community.cloudflare.com/t/multiple-replacement/152668/2

...