(Django / Javascript / SQLite3):这个“class * =”选择器如何工作?它做了什么

时间:2017-06-15 17:05:17

标签: javascript jquery python django sqlite

我正在使用Django的web开发项目,该项目使用希腊文和拉丁文的数据库。这是由多人共同完成的,但是我正在接受这个项目。我有Django和Javascript的入门经验,虽然我已经学到了很多新东西,但我还是有这样的问题。

请看一下main.js文件中的这些代码行。

// Hide all text/book elements NOT part of the selected language:
books.not("[class*='" + lang + "']").css("display", "none");
// Show all which are part of the selected language:
books.filter("[class*='" + lang + "']").css("display", "block");
//What if I had a function that took books as an arg, and then app

事实上,我只是不知道该术语在语法上发生了什么, "[class*=]"。但是,我已经了解了.filter()和.not()方法以及.css()方法。

然而,这两行代码似乎完成了一些重要的事情。他们能够确定哪些图书对象采用lang变量(字符串)指定的语言。必要时会应用display:nonedisplay:block

我找不到关于这个选择器究竟是什么或它是如何工作的任何文档。此外,我的所有不熟悉javascript的同事都被这个选择器使用术语“类”的事实立即抛弃了。他们认为这将指的是一个html元素,它的类等于lang指定的字符串(即class =“greek”)。但是没有“希腊”课程。

我唯一的猜测是,这种语法允许我们访问数据库并检查哪些记录(或书籍对象)具有设置为“lang”的字段或列。这将是一个有用的选择器,能够让我的数据库查询我的数据库的其他东西,如书籍类型,日期等...所以我需要知道发生了什么。任何轻微的解释都会有所帮助。如果您有文档链接,无论基本如何,如果您认为它可以帮助我在Javascript和Django中获得更好的基础,请发送它。

1 个答案:

答案 0 :(得分:0)

它是一个css selector,在这种情况下是一个属性选择器,它查找名为class的属性,该属性包含一个希腊字符串。

  

https://drafts.csswg.org/selectors-3/#selectors

     

E [foo * =" bar"]一个E元素,其中" foo"属性值包含   子串" bar"

因此,使用lang传递时显示的代码,.not()行会隐藏任何不包含greek的元素。下一行显示其中包含greek的所有元素。

如果当前没有class=greek的元素,则代码是动态的并不重要。意思是代替硬编码例如希腊语,你可以在lang中传递希腊语,只会显示出来。或者,如果您将其更改为英国,则只显示英国元素而无需更改实际的js代码。