diff --git a/core/fxcrt/css/cfx_cssselector.cpp b/core/fxcrt/css/cfx_cssselector.cpp
index 53f00b0..1ea8231 100644
--- a/core/fxcrt/css/cfx_cssselector.cpp
+++ b/core/fxcrt/css/cfx_cssselector.cpp
@@ -12,24 +12,20 @@
 
 namespace {
 
-int32_t GetCSSNameLen(const wchar_t* psz, const wchar_t* pEnd) {
-  const wchar_t* pStart = psz;
-  while (psz < pEnd) {
-    if (!isascii(*psz) || (!isalnum(*psz) && *psz != '_' && *psz != '-')) {
-      break;
-    }
-    ++psz;
+size_t GetCSSNameLen(WideStringView str) {
+  for (size_t i = 0; i < str.GetLength(); ++i) {
+    wchar_t wch = str[i];
+    if (!isascii(wch) || (!isalnum(wch) && wch != '_' && wch != '-'))
+      return i;
   }
-  return psz - pStart;
+  return str.GetLength();
 }
 
 }  // namespace
 
-CFX_CSSSelector::CFX_CSSSelector(const wchar_t* psz,
-                                 int32_t iLen,
+CFX_CSSSelector::CFX_CSSSelector(WideStringView str,
                                  std::unique_ptr<CFX_CSSSelector> next)
-    : name_hash_(
-          FX_HashCode_GetW(WideStringView(psz, iLen), /*bIgnoreCase=*/true)),
+    : name_hash_(FX_HashCode_GetW(str, /*bIgnoreCase=*/true)),
       next_(std::move(next)) {}
 
 CFX_CSSSelector::~CFX_CSSSelector() = default;
@@ -39,11 +35,8 @@
     WideStringView str) {
   ASSERT(!str.IsEmpty());
 
-  const wchar_t* psz = str.unterminated_c_str();
-  const wchar_t* pStart = psz;
-  const wchar_t* pEnd = psz + str.GetLength();
-  for (; psz < pEnd; ++psz) {
-    switch (*psz) {
+  for (wchar_t wch : str) {
+    switch (wch) {
       case '>':
       case '[':
       case '+':
@@ -52,18 +45,19 @@
   }
 
   std::unique_ptr<CFX_CSSSelector> head;
-  for (psz = pStart; psz < pEnd;) {
-    wchar_t wch = *psz;
+  for (size_t i = 0; i < str.GetLength();) {
+    wchar_t wch = str[i];
     if ((isascii(wch) && isalpha(wch)) || wch == '*') {
       if (head)
         head->set_is_descendant();
-      int32_t iNameLen = wch == '*' ? 1 : GetCSSNameLen(psz, pEnd);
-      auto new_head =
-          std::make_unique<CFX_CSSSelector>(psz, iNameLen, std::move(head));
+      size_t len =
+          wch == '*' ? 1 : GetCSSNameLen(str.Last(str.GetLength() - i));
+      auto new_head = std::make_unique<CFX_CSSSelector>(str.Substr(i, len),
+                                                        std::move(head));
       head = std::move(new_head);
-      psz += iNameLen;
+      i += len;
     } else if (wch == ' ') {
-      psz++;
+      ++i;
     } else {
       return nullptr;
     }
diff --git a/core/fxcrt/css/cfx_cssselector.h b/core/fxcrt/css/cfx_cssselector.h
index 91778ab..41de083 100644
--- a/core/fxcrt/css/cfx_cssselector.h
+++ b/core/fxcrt/css/cfx_cssselector.h
@@ -15,9 +15,7 @@
  public:
   static std::unique_ptr<CFX_CSSSelector> FromString(WideStringView str);
 
-  CFX_CSSSelector(const wchar_t* psz,
-                  int32_t iLen,
-                  std::unique_ptr<CFX_CSSSelector> next);
+  CFX_CSSSelector(WideStringView str, std::unique_ptr<CFX_CSSSelector> next);
   ~CFX_CSSSelector();
 
   bool is_descendant() const { return is_descendant_; }
