使用 Rails 搜索参数将页面滚动到 table
Scroll page to the table with result using Rails ransack params
我有一个带有排序(搜索 gem)和分页的页面,页面顶部是一般信息,底部 table 每页 10 个项目。如果用户点击分页或排序按钮,我想自动滚动到 table 跳过顶部区域。
使用 URLSearchParams
我可以跟踪对分页按钮的点击,但是当用户点击其中一个排序按钮时 ransack 添加了类似 %5Bs%5D=description+asc
和我无法使用 URLSearchParams
.
追踪它
const url = `http://localhost:3000/articles`;
const urlWithSorting = `http://localhost:3000/articles?q%5Bs%5D=started_at+desc`;
const urlWithPageAndSorting = `http://localhost:3000/articles?page=1&q%5Bs%5D=started_at+desc`;
const searchParams = new URLSearchParams(urlWithPageAndSorting);
// url
const hasPageParams = searchParams.has('page'); // false
const hasSortingParams = searchParams.has('s'); // false
// urlWithSorting
const hasPageParams = searchParams.has('page'); // false
const hasSortingParams = searchParams.has('s'); // false
// urlWithPageAndSorting
const hasPageParams = searchParams.has('page'); // true
const hasSortingParams = searchParams.has('s'); // false
if (hasPageParams || hasSortingParams) {
scroll(0, $(".js-article-table").position().top);
}
关于如何做到这一点有什么想法吗?谢谢!
这些 URL 只是标准括号查询的编码版本:
http://localhost:3000/articles?q%5Bs%5D=started_at+desc
http://localhost:3000/articles?q[s]=started_at+desc
如果您尝试打印出 URLSearchParams 实例,您将得到:
console.log([...searchParams].toString())
// q[s],started_at desc
所以你可以使用
searchParams.has('q[s]')
此外,请注意,您不能将完整的 URL 传递给构造函数,您必须先构建一个 URL,并且只使用搜索部分:
searchParams = new URLSearchParams(new URL(urlWithPageAndSorting).search)
我有一个带有排序(搜索 gem)和分页的页面,页面顶部是一般信息,底部 table 每页 10 个项目。如果用户点击分页或排序按钮,我想自动滚动到 table 跳过顶部区域。
使用 URLSearchParams
我可以跟踪对分页按钮的点击,但是当用户点击其中一个排序按钮时 ransack 添加了类似 %5Bs%5D=description+asc
和我无法使用 URLSearchParams
.
const url = `http://localhost:3000/articles`;
const urlWithSorting = `http://localhost:3000/articles?q%5Bs%5D=started_at+desc`;
const urlWithPageAndSorting = `http://localhost:3000/articles?page=1&q%5Bs%5D=started_at+desc`;
const searchParams = new URLSearchParams(urlWithPageAndSorting);
// url
const hasPageParams = searchParams.has('page'); // false
const hasSortingParams = searchParams.has('s'); // false
// urlWithSorting
const hasPageParams = searchParams.has('page'); // false
const hasSortingParams = searchParams.has('s'); // false
// urlWithPageAndSorting
const hasPageParams = searchParams.has('page'); // true
const hasSortingParams = searchParams.has('s'); // false
if (hasPageParams || hasSortingParams) {
scroll(0, $(".js-article-table").position().top);
}
关于如何做到这一点有什么想法吗?谢谢!
这些 URL 只是标准括号查询的编码版本:
http://localhost:3000/articles?q%5Bs%5D=started_at+desc
http://localhost:3000/articles?q[s]=started_at+desc
如果您尝试打印出 URLSearchParams 实例,您将得到:
console.log([...searchParams].toString())
// q[s],started_at desc
所以你可以使用
searchParams.has('q[s]')
此外,请注意,您不能将完整的 URL 传递给构造函数,您必须先构建一个 URL,并且只使用搜索部分:
searchParams = new URLSearchParams(new URL(urlWithPageAndSorting).search)