URL 查询字符串到 select 内容
URL Query String to select content
我有很多页面列出了这样的课程:
<div class="et_pb_module">Page Title</div>
<div class="insert-after"></div>
<div class="lesson-container">
<div class="et_pb_module">
<div class="content">
Lesson 1
</div>
</div>
<div class="et_pb_module">
<div class="content">
Lesson 2
</div>
</div>
<div class="et_pb_module">
<div class="content">
Lesson 3
</div>
</div>
<div class="et_pb_module">
<div class="content">
Lesson 4
</div>
</div>
</div>
如果在 URL 的查询字符串中调用了特定课程,我只想在页面上显示该课程:
例如foo.com/lessons?lesson1
应该只显示 "lesson 1"
我在 jQuery 中有一个 IF 语句可以执行此操作:
if (window.location.href.indexOf("?lesson1") > -1) {
$('.et_pb_module').hide();/*Hide all lessons*/
$('.lesson-container .et_pb_module:nth-of-type(2) .content ').insertAfter('.insert-after'); /*Select content from first lesson and place it at top of the page after 'insert-after'*/
}
这很好用,但每次创建大量重复代码时,我都必须将上面的内容删减九次,更新查询字符串和 :nth-of-type
选择器。
有什么方法可以使用数组来压缩这个过程吗?
感谢任何反馈。
您可以通过在包含课程详细信息的 div
元素上放置 id
属性来解决此问题。从那里您可以使用 this question 中引用的 getParameterByName()
函数从 URL 中读取值,然后显示所需的 div
。试试这个:
<div class="et_pb_module">Page Title</div>
<div class="insert-after"></div>
<div class="lesson-container">
<div class="et_pb_module" id="lesson1">
<div class="content">Lesson 1</div>
</div>
<div class="et_pb_module" id="lesson2">
<div class="content">Lesson 2</div>
</div>
<div class="et_pb_module" id="lesson3">
<div class="content">Lesson 3</div>
</div>
<div class="et_pb_module" id="lesson4">
<div class="content">Lesson 4</div>
</div>
</div>
var lesson = getParameterByName('lesson');
if (lesson) {
$('.lesson-container .et_pb_module').hide();
$('#' + encodeURIComponent(lesson)).show();
}
请注意,要使其正常工作,URLs 需要采用以下格式:
foo.com/lessons?lesson=lesson1
可能不是严格意义上的 jQuery 答案,但使用 CSS:
也是可能的
.lesson {
display: none;
}
.lesson:target {
display: block;
}
<a href="#1">1</a>
<a href="#2">2</a>
<div id="1" class="lesson">
DIV 1
</div>
<div id="2" class="lesson">
DIV 2
</div>
当具有当前目标 ID 的 div(因此,锚点 link)可用时,.lesson:taget
变为活动状态。
有关这方面的更多信息,请参阅 https://developer.mozilla.org/nl/docs/Web/CSS/:target
我有很多页面列出了这样的课程:
<div class="et_pb_module">Page Title</div>
<div class="insert-after"></div>
<div class="lesson-container">
<div class="et_pb_module">
<div class="content">
Lesson 1
</div>
</div>
<div class="et_pb_module">
<div class="content">
Lesson 2
</div>
</div>
<div class="et_pb_module">
<div class="content">
Lesson 3
</div>
</div>
<div class="et_pb_module">
<div class="content">
Lesson 4
</div>
</div>
</div>
如果在 URL 的查询字符串中调用了特定课程,我只想在页面上显示该课程:
例如foo.com/lessons?lesson1
应该只显示 "lesson 1"
我在 jQuery 中有一个 IF 语句可以执行此操作:
if (window.location.href.indexOf("?lesson1") > -1) {
$('.et_pb_module').hide();/*Hide all lessons*/
$('.lesson-container .et_pb_module:nth-of-type(2) .content ').insertAfter('.insert-after'); /*Select content from first lesson and place it at top of the page after 'insert-after'*/
}
这很好用,但每次创建大量重复代码时,我都必须将上面的内容删减九次,更新查询字符串和 :nth-of-type
选择器。
有什么方法可以使用数组来压缩这个过程吗?
感谢任何反馈。
您可以通过在包含课程详细信息的 div
元素上放置 id
属性来解决此问题。从那里您可以使用 this question 中引用的 getParameterByName()
函数从 URL 中读取值,然后显示所需的 div
。试试这个:
<div class="et_pb_module">Page Title</div>
<div class="insert-after"></div>
<div class="lesson-container">
<div class="et_pb_module" id="lesson1">
<div class="content">Lesson 1</div>
</div>
<div class="et_pb_module" id="lesson2">
<div class="content">Lesson 2</div>
</div>
<div class="et_pb_module" id="lesson3">
<div class="content">Lesson 3</div>
</div>
<div class="et_pb_module" id="lesson4">
<div class="content">Lesson 4</div>
</div>
</div>
var lesson = getParameterByName('lesson');
if (lesson) {
$('.lesson-container .et_pb_module').hide();
$('#' + encodeURIComponent(lesson)).show();
}
请注意,要使其正常工作,URLs 需要采用以下格式:
foo.com/lessons?lesson=lesson1
可能不是严格意义上的 jQuery 答案,但使用 CSS:
也是可能的.lesson {
display: none;
}
.lesson:target {
display: block;
}
<a href="#1">1</a>
<a href="#2">2</a>
<div id="1" class="lesson">
DIV 1
</div>
<div id="2" class="lesson">
DIV 2
</div>
当具有当前目标 ID 的 div(因此,锚点 link)可用时,.lesson:taget
变为活动状态。
有关这方面的更多信息,请参阅 https://developer.mozilla.org/nl/docs/Web/CSS/:target