使用javascript querySelector选择具有特定标记名称但具有任何名称空间的元素

时间:2017-11-01 12:40:43

标签: javascript mathml javascript-namespaces

如何使用document.querySelector或document.querySelectorAll获取任何命名空间的特定标记。

我不能使用JQuery或任何其他库。

实施例

<mml:math>
    <mml:row>
    </mml:row>
  </mml:math>
<math style="display:none;">
  <mrow>
   <msup>
     <mfenced>
       <mrow>
         <mi>a</mi>
         <mo>+</mo>
         <mi>b</mi>
       </mrow>
     </mfenced>
     <mn>2</mn>
   </msup>
 </mrow>
</math>

 var tags = ['math:not([style*="display:none"])','mml\\:math:not([style*="display:none"])'];
                              document.querySelectorAll(mathmlVisibleTag.join()).length 

此处用户可以使用任何命名空间。 我在querySelectorAll中尝试了'*\\:math:not([style*="display:none"])',但它没有用。

此致

2 个答案:

答案 0 :(得分:0)

我认为只有querySelectorAll才能实现这一点。也许最好的选择是这样的:

function isVisible(e) {
    return !!( e.offsetWidth || e.offsetHeight || e.getClientRects().length );
}

var tags = document.querySelectorAll('*'); // change this to be more specific
var visibleMaths = [].slice.call(tags).filter(function (tag) {
    return tag.nodeName.search(/math/i) >= 0 &&
             isVisible(tag);
});

jsfiddle example

答案 1 :(得分:-3)

你错过了空间,这个工作正常:

self.datePicker = UIDatePicker()
self.datePicker.backgroundColor = .white
self.datePicker.datePickerMode = .date
let loc = Locale.init(identifier: "uk")
var calendar = Calendar.current
calendar.locale = loc
self.datePicker.calendar = calendar