例如,CSS cursor
属性具有以下允许值:url | auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing
我需要在JS的数组中拥有所有这些(除了url
)。
问题是,如何创建这样的数组?我可以对它进行硬编码,但是如果将来添加另一个允许的值,或者某个值被弃用或删除......那么,语言是否有任何方式来获得这样的数组?
当然,除了从某些文档网站(如MDN)或甚至从标准网页获取此内容之外,这将是一种过度杀伤。
答案 0 :(得分:2)
不幸的是,唯一的方法是硬编码或刮网页。 JavaScript没有任何允许这样的原生函数。
要记住的是,许多属性(例如height
,width
等)接受任意数量的值。
答案 1 :(得分:1)
不知道您是否使用PHP,但是这里有一种方法可以抓取具有此信息的网页以获取每个CSS属性的值。显然,你可能希望从网站获得许可,这样你就不会通过访问属性页来锤击他们的服务器,因为你可以看到我在下面仅限于10个结果。使用“ob”功能,不确定它是否是最豪华的解决方案..
<?php
ini_set('max_execution_time', 600);
ob_end_clean();
ob_implicit_flush(true);
libxml_use_internal_errors(true);
function getValuesForElement($element) {
$valueArray = [];
try {
$dom = new DOMDocument();
$dom->prevservWhiteSpace = false;
$dom->loadHTMLFile('http://css-infos.net/property/' . $element);
$data = $dom->getElementsByTagName('code');
foreach($data as $css) {
$val = preg_replace("/\s+/S", "", $css->nodeValue);
if(!empty($val)) {
$valueArray[] = $val;
}
}
} catch(Exception $e) {
// Log error..
}
return $valueArray;
}
function getElements() {
try {
$i = 0;
$elementsArr = [];
$dom = new DOMDocument();
$dom->prevservWhiteSpace = false;
$dom->loadHTMLFile('http://css-infos.net/');
$data = $dom->getElementsByTagName('li');
foreach($data as $css) {
if($i === 10) {
break;
}
$nodeVal = $css->nodeValue;
if($nodeVal == "Webkit CSS properties") {
continue;
}
$elementsArr[$nodeVal] = getValuesForElement($nodeVal);
echo "getting <strong><em>".$nodeVal."</em></strong> values..\n";
$i++;
sleep(1);
}
} catch(Exception $e) {
// Log error..
}
print_r($elementsArr);
}
echo "<pre>";
getElements();
die();
?>