Nav menus Fast previewing not working with wp_get_nav_menu_items!

You must use wp_nav_menu() if you want to get selective refresh (fast previewing). If you want to have a custom nav menu that uses selective refresh, then instead of manually iterating over wp_get_nav_menu_items() you instead need to subclass the Walker_Nav_Menu to implement your custom logic, and then pass it into wp_nav_menu() like this:

wp_nav_menu( array(
    'theme_location' => 'primary',
    'walker' => 'My_Custom_Nav_Menu_Walker',
) );

Here’s one example of creating a custom walker: https://wordpress.stackexchange.com/a/116719/8521

Note that you must pass the walker class as a string and not an object in order for selective refresh to be available. See full conditions.