【问题标题】:Returned JavaScript value wont render inside a div element返回 JavaScript 值不会在 div 元素内呈现
【发布时间】:2019-11-13 13:18:27
【问题描述】:

这是一个基本问题(再次发布,因为在我更新 the question 后它没有重新打开)。但我在 SO 上找不到任何重复项。

这是我打算在不同页面上的项目中使用的脚本。目的是将span 元素中显示的默认ID 覆盖为来自URL 参数session_order 的订单号。这不会影响任何事情,只会增强我项目的用户体验。

scripts.js(加载在标头中):

function get_url_parameter(url, parameter) {
    var url = new URL(url);
    return url.searchParams.get(parameter);
}

在我的 HTML 模板中,我以这种方式调用函数,

<div onload="this.innerHTML = get_url_parameter(window.location.href, 'session_order');">24</div>

也试过这个,

<div><script type="text/javascript">document.write(get_url_parameter(window.location.href, 'session_order'));</script></div>

当页面被渲染时,没有任何变化。对于第一种情况,控制台中没有错误或警告。

对于第二种情况,控制台记录了错误Uncaught ReferenceError: get_url_parameter is not defined,尽管script.jsdiv 元素之前加载(没有任何错误)。

通常,我会在服务器端使用 Flask 执行此操作,但我正在尝试 JavaScript(我是 JavaScript 新手),因为它只是一个 UX 增强。

我错过了什么?

【问题讨论】:

  • 由于HTML是从上到下读取的,如果你的函数是在元素调用之后声明的,它就找不到了。您可以在正文的末尾包装您的 javascript 以便找到它。
  • @AndréSilva,如果是这样的话,第一个案例应该也失败了吧?我在控制台中没有看到类似的错误。
  • 我正在将我的script.js 加载到&lt;head&gt; 并调用&lt;body&gt; 中的函数。

标签: javascript html


【解决方案1】:

试试这个:

// This is commented because it can't be tested inside the stackoverflow editor
//const url = window.location.href;
const url = 'https://example.com?session_order=13';

function get_url_parameter(url, parameter) {
    const u = new URL(url);
    return u.searchParams.get(parameter);
}

window.onload = function() {
  const el = document.getElementById('sessionOrder');
  const val = get_url_parameter(url, 'session_order');
  if (val) {
    el.innerHTML = val;
  }
}
&lt;span id="sessionOrder"&gt;24&lt;/span&gt;

定义获取 URL 参数所需的函数,然后在窗口加载事件中,获取 URL 参数并更新元素。

【讨论】:

  • 谢谢。这行得通。我仍然想了解为什么 &lt;div onload="this.innerHTML = get_url_parameter(window.location.href, 'session_order');"&gt;24&lt;/div&gt; 不起作用。
  • 因为div 元素没有onload 事件。
【解决方案2】:

给你。尽量远离使用 document.write 的内联脚本。

function get_url_parameter(url, parameter) {
    var url = new URL(url);
    return url.searchParams.get(parameter);
}

window.addEventListener('load', function() {
  const url = 'https://yourpagesdomain.name/?session_order=hello'; //window.location.href;
  
  const sessionOrder = get_url_parameter(url, 'session_order');
  document.getElementById('sessionOrder').innerText = sessionOrder;
  
});
&lt;div id="sessionOrder"&gt;&lt;/div&gt;

【讨论】:

  • 谢谢。这行得通,但我想了解为什么 &lt;div onload="this.innerHTML = get_url_parameter(window.location.href, 'session_order');"&gt;24&lt;/div&gt; 不起作用。
  • 基本上,你不能。 onload 事件仅支持少数元素,&lt;div&gt; 不是其中之一。 stackoverflow.com/questions/4057236/…
  • 谢谢。这澄清了我的问题。
【解决方案3】:

标记和脚本的顺序很重要...

<div></div>

<script>
function get_url_parameter(url, parameter) {
    var url = new URL(url);
    return url.searchParams.get(parameter);
}
</script>

<script>
document.querySelector('div').innerHTML = get_url_parameter('https://example.com?session_order=2', 'session_order');
</script>

【讨论】:

  • 我明白了。但就我而言,我的script.js 加载在&lt;head> 中,而函数在&lt;body&gt; 中调用。我试图理解为什么this.innerHTML 也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多