【问题标题】:Display Parsed URL Value显示解析的 URL 值
【发布时间】:2019-12-03 22:02:38
【问题描述】:

在将头撞在屏幕上几个小时后,我被卡住了。我希望有更多知识的人可以帮助我。我的最终目标是获取解析后的 URL 参数并将它们显示在我的 Wordpress 页面的正文中。示例 URL 可能是“www.urlexample.com/?var1=red&var2=shoes”。

如果我检查我的页面,我可以在会话存储中看到键/值对显示。例如,我会看到带有 value="red" 的 key="var1"。所以这意味着这意味着javascript正在工作。现在如何在我的页面正文中显示它?例如; “你最喜欢的颜色是红色”(红色是 var1)

<!-- URL Parse Code -->
<script>
    var queryForm = function(settings) {
        var reset = settings && settings.reset ? settings.reset : false;
        var self = window.location.toString();
        var querystring = self.split("?");
        if (querystring.length > 1) {
            var pairs = querystring[1].split("&");
            for (i in pairs) {
                var keyval = pairs[i].split("=");
                if (reset || sessionStorage.getItem(keyval[0]) === null) {
                    sessionStorage.setItem(keyval[0], keyval[1]);
                }
            }
        }
        var hiddenFields = document.querySelectorAll("input[type=hidden]");
        for (var i=0; i<hiddenFields.length; i++) {
            var param = sessionStorage.getItem(hiddenFields[i].name);
            if (param) document.getElementById(hiddenFields[i].name).value = param;
        }
    }
    queryForm();
</script>
<!-- URL Parse Code -->

【问题讨论】:

  • 看看UrlSearchParams应该会有所帮助。
  • @Bibberty - 关于 URLSearchParams... 这可以捕获着陆页吗?上面的代码让我解析了要存储的 URL 变量是 sessionStorage。我也在寻找一种方法将登录页面存储为变量。想法?
  • 你的意思是网址的路径吗?
  • 看看URL 或者使用const url = new URL(window.location); 从那里你可以得到你需要的东西。
  • @Bibberty 好的,通过您记下的 URL 链接取得进展。下面的答案使用了会话数据。此方法中的任何想法如何在 HTML 文本字段中显示变量?下面是我正在使用的代码,可以正确控制这些值。 ```const EnteringURL = 'example.com/?campaign=vcampaign&src=vsrc' const urlObject = new URL(EnteringURL); const host = urlObject.host const href = urlObject.href console.log(host) console.log(href) let url = new URL(EnteringURL);让 params = new URLSearchParams(url.search.slice(1)); console.log(url.searchParams.get('campaign'));

标签: javascript wordpress variables


【解决方案1】:

不确定这是否是您在 Brett 上面的问题中提出的问题。

const EnteringURL = 'https://example.com/?campaign=vcampaign&src=vsrc';
// const urlObject = new URL(EnteringURL);
// const host = urlObject.host;
// const href = urlObject.href console.log(host) console.log(href) let url = new URL(EnteringURL);
// let params = new URLSearchParams(url.search.slice(1));
// console.log(url.searchParams.get('campaign'));

const mapParams = (p) => Array.from(p.keys()).map(k => `<li>${k} - ${p.get(k)}</li>`).join('');

const mapLoad = (url) => {
  const { host, href, search } = new URL(url);
  const params = new URLSearchParams(search.slice(1));
  document.querySelector('.mapped').innerHTML = `
    <div class="url">URL - ${href}</div>
    <div class="host">HOST - ${host}</div>
    <div class="href">SEARCH - ${search}</div>
    <ul class="params">
      ${mapParams(params)}
    </ul>
  `; 
};

const loadIntoHTML = (url) => {
  const { host, href, search } = new URL(url);
  const params = new URLSearchParams(search.slice(1));
  document.querySelector('.href').innerHTML = encodeURI(href);
  document.querySelector('.host').innerHTML = host;
  document.querySelector('.search').innerHTML = search;
  document.querySelector('.params').innerHTML = mapParams(params);
};

const loadIntoHiddenForm = (url) => {
  const { host, href, search } = new URL(url);
  const params = new URLSearchParams(search.slice(1));
  const campaign = params.get('campaign');
  const src = params.get('src');
  document.querySelector('#href').value = encodeURI(href);
  document.querySelector('#host').value = host;
  document.querySelector('#search-params-campaign').value = campaign;
  document.querySelector('#search-params-src').value = src;
};

document.querySelector('.show').addEventListener('click', () => {
  document.querySelector('.hidden-fields').classList.toggle('hide');
});

loadIntoHiddenForm(EnteringURL);
loadIntoHTML(EnteringURL);
mapLoad(EnteringURL);
.hidden-fields, .mapped, .loaded {
  border: 2px solid #000;
  border-radius: 7px;
  margin-bottom: 2rem;
}

.hidden-fields input[type="text"] {
  display: block;
  font-weight: bold;
  margin: 0.25rem;
  min-width: 375px;
}

.hide {
  display: none;
}
<h2 class="show">Hidden Forms Fields (Click to show)</h2>
<div class="hidden-fields hide">
  <input type="text" id="href" />
  <input type="text" id="host" />
  <input type="text" id="search-params-campaign" /> 
  <input type="text" id="search-params-src" /> 
</div>

<h2>Build the HTML</h2>
<div class="mapped">

</div>

<h2>Load into HTML</h2>
<div class="loaded">
  <div class="href"></div>
  <div class="host"></div>
  <div class="search"></div>
  <ul class="params"> 
  </ul>
</div>

【讨论】:

  • 越来越近,我非常感谢您的时间!我可能没有很好地解释这一点。我边走边学。我的目标是获取数据(主机、href、参数)并将这些值输入到我的表单(html 部分)上的各个隐藏字段中。我能够通过会话存储(部分)完成,然后意识到域、登录页面等数据不在会话存储中。基本上是'?'之前的东西。这导致我找到了提到的 URL 路径,希望得到一个代码来覆盖我试图传递的所有数据点。
  • 对于会话存储,我能够使用 HTML 将会话键;值放入 字段中。以下是我所做的想法。基本上,由于我上面提到的原因,我正在尝试使用参数而不是会话存储来做同样的事情。不确定是否可能。希望这有助于澄清。 &lt;div&gt; &lt;script&gt; document.getElementById("formfieldId1").value = sessionStorage.getItem('campaign'); document.getElementById("formfieldId2").value = sessionStorage.getItem('src'); &lt;/script&gt; &lt;/div&gt;
  • 现在看看,你应该有你需要的一切。请为答案投票。
  • 我希望你能再帮忙做一件事?如果我想在各自的字段中显示单个广告系列值(“vcampaign”)和 src 值('vsrc')而不是一个长值,该怎么办。 const campaign = new URLSearchParams(search.slice(1)).get('campagin') document.querySelector('#campaign').value = campaign; document.querySelector('#src').value = src; document.querySelector('#href').value = encodeURI(href); document.querySelector('#host').value = host; document.querySelector('#search-params-campaign').value = search; };
  • &lt;h2 class="show"&gt;Hidden Forms Fields (Click to show)&lt;/h2&gt; &lt;div class="hidden-fields hide"&gt; &lt;input type="text" id="campaign" /&gt; &lt;input type="text" id="src" /&gt; &lt;input type="text" id="href" /&gt; &lt;input type="text" id="host" /&gt; &lt;input type="text" id="search-params-campaign" /&gt; &lt;/div&gt;
【解决方案2】:

如果变量和值在会话存储中:

var el = document.getElementById('elementid'); /// get the element on body by its id. 
el.innerHTML = sessionStorage.getItem('key'); /// get the value by key and set the text in the element

https://codepen.io/fernandosiebra/pen/NWPPjoO

【讨论】:

  • 感谢您的回复。我仍然无法显示。所以在我的 header.php 上,我添加了 然后在我的页面上我添加了
    。当我搜索会话存储时,我看到 var1 = red (key,value)。在这方面还是新手,所以我还在学习!我错过了什么?
  • 在页面上创建具有相同 id 键的会话存储元素并将其放在 queryForm 函数的末尾: for( var i = 0; i
  • 我终于能够解决这个问题,让它发挥作用!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2020-12-31
  • 1970-01-01
相关资源
最近更新 更多