如何获取给定CSS属性的所有允许值的数组?

时间:2017-07-24 20:16:01

标签: javascript css

例如,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)或甚至从标准网页获取此内容之外,这将是一种过度杀伤。

2 个答案:

答案 0 :(得分:2)

不幸的是,唯一的方法是硬编码或刮网页。 JavaScript没有任何允许这样的原生函数。

要记住的是,许多属性(例如heightwidth等)接受任意数量的值。

答案 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();
?>